什麼是Hoisting(提升)
當js在編譯時會把變數宣告以及函式宣告提升到該作用域
的最頂端,但實際上不會去改動程式碼,有時候在撰寫程式碼時有沒有發現雖然你的function宣告在後面,卻在前面使用function而不會跳錯,就是這個原因
變數 var, let, const
在var宣告變數及使用變數時如果寫成以下狀況,變數a會被提升,在這情況a雖然可以被印出,但不會被賦值,所以會印出undefined。
1 | function exampleFunction() { |
let, const,若是這樣寫則是會跳出錯誤,Uncaught ReferenceError: Cannot access 'a' before initialization
,告訴你在尚未初始化前不能使用該變數,該變數會是在暫時死區
(temporal dead zone)直到該變數被宣告為止。
1 | function exampleFunction() { |
Function提升
這裡要分Declaration ,Expressions, Arrow Functions 三種
在提升的部分,只有Declaration Function 才會被提升,Expressions Function 和 Arrow Function 都不會被提升,所以哪天在寫程式時發現寫在後面的function無法被前面程式碼使用,通常就是這原因,在js編譯時沒有把它提升上來。
Declaration Function 如下:
1 | exampleFunction() |
Expressions Function 如下:
1 | exampleFunction() |
Arrow Function 如下:
1 | exampleFunction() |
--- 到底拉 The End ---