JavaScript Hoisting
在 JavaScript 中宣告的變數和函數,會被 JavaScript 直譯器 (interpreter) 先處理,換句話說,你在 global 或 function 任何位置宣告一個變數,就像在該 scope 最開頭的位置宣告一樣,這種特性就叫做 Hoisting (提升)。
因為 Hoisting 這特性,變數和函數宣告會被隱性的搬到 scope 的最上方,也造成為什麼一個變數可以在宣告之前就能被引用。
例如:
bla = 2;
var bla;
上面的程式執行起來會跟下面一樣:
var bla; // 函數宣告被隱性拉到最上方
bla = 2;
變數還沒宣告就被引用也不會出錯:
function foo() {
alert(a);
var a;
}
// 顯示 undefined,而不是錯誤 ReferenceError: a is not defined
foo();
也因為 JavaScript 隱性的 Hoisting,一般好的習慣是將變數宣告都放在最上方,讓程式邏輯更清楚,也可以避免預期外的結果或錯誤發生。