JavaScript 全攻略:克服 JS 的奇怪部分 - 執行環境與詞彙環境(2)

JavaScript 全攻略:克服 JS 的奇怪部分筆記 - 第二章

抬升(Hoisting)

抬升(Hoisting)

一般寫code的時候,我們都會習慣宣告完再使用之,但在js中除了可以這樣之外,還有另種方式,如下面的範例程式。

範例

一般情況:

這樣確實可以正常執行

JavaScript的情況:

但在js中,我們把順序換一下試試看:

最後居然也可以正常執行出來,但好像a的值變成undefined了

今天的這種現象叫做hoisting,在W3C的解釋是這樣的:

所以才會有上圖就算把宣告放後面也不會有error的結果,在宣告階段就已經把變數(a)以及function(b)放在記憶體當中了。此外,你會發現a的值是undefined,這可以說明另外一件事:

故在執行階段才會去逐行檢視程式的給值,initialization是在hoisting之後。所以一開始會為fun和變數設記憶體,但只有在執行到a那行時才知道a的值是hello world。

更詳細的內容可以參考W3C上面關於Hoisting的解釋:連結

參考資料

https://www.udemy.com/javascriptjs/learn/v4/overview