JavaScript-提升(Hoisting)

javascript的執行環境分為兩階段,會先經歷創建階段(creation),之後才正式進入程式碼執行階段(exection)

在創建階段中會將函式及變數先設置在記憶體中,而這個動作稱作「提升(hoisting)」,另外細分解釋函式提升變數提升

函式提升

在執行任何程式碼前,JavaScript 會把「函式宣告初始化」放進記憶體裡面,意思是函式{}的內容都會在創建階段放在記憶體中。

變數提升

在創建階段,電腦的記憶體為a空出記憶體,可是他還不知道他的值為何,會先給予一個undefine的值,等到執行階段賦值時,才會將a的值放進記憶體中。也因此下方案例,印出a並不會出錯,只是它的值為undefine。

程式實際執行程序

  1. 首先在creation創建階段,會做:

    • 函式提升-在記憶體中創建函式b(){…}
    • 變數提升-在記憶體中創建出變數a,並給予預設值undefined
  2. 接著開始進入exection執行階段,由上而下一行一行編譯讀取程式碼

    • 印出b的值(將b函式內容印出來)
    • 呼叫b()
    • 印出a的值(此時的值仍為預設值undefined)
    • 設定a的值為’I am a’
    • 印出a的值(此時的值為’I am a’)
1
2
3
4
5
6
7
8
console.log(b); 
function b(){
console.log('called b.');
}
b();
console.log(a);
var a = 'I am a';
console.log(a);

完整執行結果如下

© 2020 Leah's Blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero