javascript 函數(shù)聲明的優(yōu)勢(shì)分析
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
我對(duì)箭頭函數(shù)絕對(duì)是真愛(ài),但要聲明一個(gè)頂級(jí)函數(shù)時(shí),我仍用“土氣”的函數(shù)聲明。
為什么呢?“Uncle Bob” Martin 是這么說(shuō)的:
花1小時(shí)寫(xiě)代碼,就要花10小時(shí)檢查代碼。查找漏洞都成了寫(xiě)代碼的一部分了,這個(gè)差距太懸殊。就算寫(xiě)代碼多費(fèi)點(diǎn)時(shí)間,代碼也要簡(jiǎn)單易懂。—— Robert C. Martin《Clean Code: A Handbook of Agile Software Craftsmanship》
相比函數(shù)表達(dá)式,函數(shù)聲明有兩大優(yōu)勢(shì):
1
目的明了
每天看上千行代碼,快速了解程序員的目的非常重要。
看看這行代碼:
const maxNumberOfItemsInCart = 。。.;
讀完了還是不知道這省略符號(hào)是函數(shù)還是其他什么值。它可能是:
const maxNumberOfItemsInCart = 100;
也可能是:
const maxNumberOfItemsInCart = (statusPoints) =》 statusPoints * 10;
如果使用函數(shù)聲明就沒(méi)有這個(gè)麻煩了。
請(qǐng)看:
const maxNumberOfItemsInCart = 100;
對(duì)比:
function maxNumberOfItemsInCart(statusPoints) {
return statusPoints * 10;
}
從一開(kāi)始目的就很明了。
不過(guò),如果你的代碼編輯器可以用顏色區(qū)分代碼,或者你在用一個(gè) Speed Reader,就當(dāng)我什么都沒(méi)說(shuō)。
你們肯定在暗自贊嘆函數(shù)聲明既簡(jiǎn)潔又迷人吧。
實(shí)際上,僅這一個(gè)原因還不足以服人,還有另外一個(gè)原因。
2
Order of declaration == order of execution
執(zhí)行順序和聲明順序一致時(shí),是最理想的。如果能做到執(zhí)行時(shí)才聲明使用 const(常數(shù))關(guān)鍵字的值就很厲害了。
都退后,我要開(kāi)始裝逼了
Fair warning:接下來(lái)我要放大招了——下文“行話”連篇,但你只要明白在聲明之前不能使用常數(shù)就好。
以下的代碼會(huì)拋出一個(gè)錯(cuò)誤:
sayHelloTo(‘Bill’);
const sayHelloTo = (name) =》 `Hello ${name}`;
這是因?yàn)椋?dāng) Java 引擎閱讀代碼時(shí),會(huì)綁定(bind)而非初始化sayHelloTo。
Java 中所有聲明都是提升(hoist)和綁定的,但初始化的方式各自不同。換言之,Java 提升了sayHelloTo的聲明——先閱讀,再置其于頂層,然后創(chuàng)建空間來(lái)儲(chǔ)存其值——但在執(zhí)行之前不會(huì)聲明sayHelloTo。
sayHelloTo綁定和初始化的時(shí)間差叫作“暫存死區(qū)(TDZ)”。
如果在瀏覽器里直接使用ES2015(而不是借助Babel等使用ES5),以下的代碼也會(huì)拋出錯(cuò)誤:
if(thing) {
console.log(thing);
}
const thing = ‘a(chǎn)wesome thing’;
以上的代碼是用var而非const寫(xiě)的,不會(huì)拋出錯(cuò)誤,因?yàn)樽兞勘唤壎〞r(shí)會(huì)初始化為undefined,而常數(shù)被綁定時(shí)完全不會(huì)被初始化。有點(diǎn)偏題了……
函數(shù)聲明不會(huì)有此類(lèi) TDZ 問(wèn)題。如下文,代碼可以是:
sayHelloTo(‘Bill’);
function sayHelloTo(name) {
return `Hello ${name}`;
}
這是因?yàn)楹瘮?shù)聲明在被綁定時(shí)就被初始化了——這是在執(zhí)行代碼之前。
所以不論何時(shí)進(jìn)行函數(shù)聲明,代碼開(kāi)始執(zhí)行時(shí),語(yǔ)法都是符合其作用域的。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
javascript 函數(shù)聲明的優(yōu)勢(shì)分析下載
相關(guān)電子資料下載
- 如何解決跨域問(wèn)題 71
- QT原生的QJson是否有更優(yōu)雅的方法來(lái)封裝一些Json對(duì)象 224
- WebLOAD的優(yōu)勢(shì)和功能 178
- 使用WebLOAD構(gòu)建負(fù)載測(cè)試方案 111
- Linux使用者請(qǐng)關(guān)注即將發(fā)布的GNOME 45 323
- 2023年07月編程語(yǔ)言排行榜,C++即將超越C 251
- 如何使用javascript制作一個(gè)網(wǎng)頁(yè)端3D貪吃蛇游戲(附源碼) 3388
- 為什么你根本學(xué)不下去TypeScript? 496
- Preemptive JSDefender功能 321
- WebAssembly是什么?為什么需要WebAssembly?WebAssembly的工作原理 572