JavaScript 引擎的工作方式是,先解析程式碼,獲取所有被宣告的變數,然後再一行一行地執行。這造成的結果,就是所有變數的宣告語句,都會被提升到程式碼的頭部,這就叫做變數提升(hoisting)。
console.log(a); // undefined var a = 1;
上面的程式碼首先使用 console.log 方法,在控制檯顯示變數 a 的值。這時變數 a 還沒有宣告和賦值,應該會報錯,但實際上不會報錯。因為存在變數提升,真正執行的是下面的程式碼。
var a; console.log(a); a = 1;
最後的結果是顯示 undefined,表示變數 a 已經宣告,但還未賦值。