在 JavaScript 中,variable hoisting 是一個容易犯錯的地方。 在一段 scope 裡面,沒有定義變量就使用變量的話會彈出 Reference Error。

 // ReferenceError: poi is not defined
console.log(poi);

var name;
console.log(name); // undefined
name = 'calpa'
console.log(name); // calpa

由於JavaScript的解釋器會提前把所有變量函數定義,所以上面這一段代碼會變成這一段:

console.log(name); // undefined
var name = 'calpa';
console.log(name); // calpa

另外,JavaScript也會出現這樣的問題。。。

var name = 'calpa';
(function () {
    // My name is undefined
    console.log("My name is " + name);
    var name = 'poi';
    // My name is poi
    console.log("My name is " + name); // poi
})();

解決方法

簡單來說,我們在寫 JavaScript 時,應該提前在檔案開始位置定義變量。


參考資料:

  1. Variable and Function Hoisting in JavaScript
  2. JavaScript 中的变量和函数提升
如果你覺得我的文章對你有幫助的話,希望可以推薦和交流一下。歡迎關注和 Star 本博客或者關注我的 Github