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