先看下面的幾個例子:
1.
var a = 99; // 全域性變數a f(); // f是函式,雖然定義在呼叫的後面,但是函式宣告會提升到作用域的頂部。 console.log(a); // a=>99, 此時是全域性變數的a function f() { console.log(a); // 當前的a變數是下面變數a宣告提升後,預設值undefined var a = 10; console.log(a); // a => 10 } // 輸出結果: undefined 10 99
2.
{ var i = 9; } console.log(i); // 9
3.
{ let i = 9; // i變數只在 花括號內有效 } console.log(i); // Uncaught ReferenceError: i is not defined
總結:在ES6中開始用let來定義塊級作用域變數,let沒有變數的提升,用let宣告的變數要求必須等let宣告語句執行之後,該變數才能使用不然會報Uncaught ReferenceError 錯誤,而且let變數不能進行重複宣告。