創造與提升 (Creation and Hoisting)
這個章節將延續前面的執行環境進一步探討 JS 在創造執行環境時做了什麼
一段簡單的變數與函式宣告如下:
1 | var a = 'Hellow World'; |
結果可想而知會依序出現,但如果將呼叫的順序對調,會出現神奇的結果如下:
1 | b(); |
原因是 JS 執行環境被分成以下兩階段創造
Creation Phase 創造階段
在這個階段以下的東西會被創造
Global Object
this
Outer Environment
Hoisting : Setup memory space for variables and functions
在這個階段變數與函式會被定義且已經在記憶體中,函式的程式碼會被執行,但變數只會在記憶體中宣告但並不知道等號 (=) 右側所賦予的質為何,所以預設賦予他一個 ‘undefined’ 的值,而不是未宣告的 ‘not defined’
Execution Phase 執行階段
而在這個階段變數與函式都已經存在於記憶體中,接著 JS 會由上而下依序執行,直到出現等號 (=) 賦值才會出現我們期待的結果