1在js中只有兩種作用域
a:全局作用域
b:函數(shù)作用域
在ES6之前,js是沒(méi)有塊級(jí)作用域。
首先來(lái)解釋一下什么是沒(méi)有塊級(jí)作用域?

所以此時(shí) 是可以打印輸出變量a的值。
2:什么是變量提升?
在我們的js中,代碼的執(zhí)行時(shí)分兩步走的,1、解析 2、一步一步執(zhí)行
那么變量提升就是變量聲明會(huì)被提升到作用域的最頂上去,也就是該變量不管是在作用域的哪個(gè)地方聲明的,都會(huì)提升到作作用域的最頂上去。

那么上面這種寫(xiě)法其實(shí)等價(jià)于下面這種寫(xiě)法:

看幾個(gè)例子:

把上面的例子稍作改動(dòng):
結(jié)果就會(huì)大不一樣,

再看一個(gè)例子:

3:什么是函數(shù)提升?

輸出的結(jié)果是:

注意:函數(shù)聲明式,會(huì)將函數(shù)的聲明和定義一起提升到作用域的最頂上去。
如果是這種寫(xiě)法:函數(shù)表達(dá)式聲明的函數(shù)

例子:

輸出的結(jié)果是:

最后的總結(jié):
1:所有的聲明都會(huì)提升到作用域的最頂上去。
2:同一個(gè)變量只會(huì)聲明一次,其他的會(huì)被忽略掉。
3:函數(shù)聲明的優(yōu)先級(jí)高于變量申明的優(yōu)先級(jí),并且函數(shù)聲明和函數(shù)定義的部分一起被提升。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注