JavaScript Let
塊作用域
在 ES6 (2015) 之前,JavaScript 沒有塊作用域。
JavaScript 具有全域性作用域和函式作用域。
ES6 引入了兩個新的 JavaScript 關鍵字:let 和 const。
這兩個關鍵字在 JavaScript 中提供了塊作用域
示例
在 { } 塊內宣告的變數無法從塊外部訪問
{
let x = 2;
}
// x 在這裡不能使用
全域性作用域
使用 var 宣告的變數始終具有全域性作用域。
使用 var 關鍵字宣告的變數不能具有塊作用域
示例
在 { } 塊內使用 var 宣告的變數可以從塊外部訪問
{
var x = 2;
}
// x 在這裡可以使用
不能重新宣告
使用 let 定義的變數不能重新宣告。
您不能意外地重新宣告一個使用 let 宣告的變數。
使用 let,您不能這樣做
let x = "John Doe";
let x = 0;
使用 var 定義的變數可以重新宣告。
使用 var,您可以這樣做
var x = "John Doe";
var x = 0;
重新宣告變數
使用 var 關鍵字重新宣告 JavaScript 變數可能會導致問題。
在塊內重新宣告變數也會重新宣告塊外的變數
使用 let 關鍵字重新宣告變數可以解決此問題。
在塊內重新宣告變數不會重新宣告塊外的變數
var、let 和 const 之間的區別
| 作用域 | 重新宣告 | 重新賦值 | 宣告提升 | 繫結 this | |
| var | 否 | 是 | 是 | 是 | 是 |
| let | 是 | 否 | 是 | 否 | 否 |
| const | 是 | 否 | 否 | 否 | 否 |
什麼好?
let 和 const 具有塊作用域。
let 和 const 不能重新宣告。
let 和 const 必須在使用前宣告。
let 和 const不繫結到 this。
let 和 const未被提升。
什麼不好?
var 不必宣告。
var 被提升。
var 繫結到 this。
瀏覽器支援
Internet Explorer 11 或更早版本不支援 let 和 const 關鍵字。
下表定義了完全支援的第一個瀏覽器版本
| Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
| 2016 年 3 月 | 2015 年 7 月 | 2015 年 1 月 | 2017 年 9 月 | 2016 年 3 月 |
重新宣告
在程式的任何地方都可以使用 var 重新宣告 JavaScript 變數
使用 let,在同一塊中重新宣告變數不允許
示例
var x = 2; // 允許
let x = 3; // 不允許
{
let x = 2; // 允許
let x = 3; // 不允許
}
{
let x = 2; // 允許
var x = 3; // 不允許
}
在另一個塊中重新宣告變數使用 let,允許
Let 宣告提升
使用 var 定義的變數被提升到頂部,並且可以隨時初始化。
含義:您可以在宣告變數之前使用它
如果您想了解更多關於宣告提升的資訊,請學習 JavaScript Hoisting 章節。
使用 let 定義的變數也被提升到塊的頂部,但未初始化。
含義:在宣告之前使用 let 變數將導致 ReferenceError