ECMAScript 6 即 ES 6 中引入了 let
語句构哺。
The let statement declares a block scope local variable, optionally initializing it to a value.
let 語句用于聲明一個局部變量城豁,作用域為 block scope轿偎,可以在聲明時初始化履羞。
var VS let 區(qū)別
區(qū)別在于聲明變量的作用域 Scope:
-
var
語句聲明的變量,作用域為 Function Scope 方法作用域 -
let
語句聲明的變量旨指,作用域為 Block Scope 代碼塊作用域桥帆,可能比 Function Scope 范圍更小,也可能相同 - 如果在任何的 block 外部使用
var
或者let
蜀漆,則聲明的變量均為全局變量谅河,即 Global Scope -
let
語句聲明的變量,在聲明之前不能訪問确丢,否則會拋出ReferenceError
Global Scope 全局作用域
注意:let
語句聲明的變量简肴,不能通過 window
對象來訪問诡右。
var foo1 = 1;
let foo2 = 2; // foo1 和 foo2 均為全局作用域 Global Scope
console.log(foo1); // 1
console.log(foo2); // 2
console.log(window.foo1); // 1
console.log(window.foo2); // undefined
Function Scope 方法作用域
function f() {
var foo1 = 1;
let foo2 = 2; // foo1 和 foo2 均為方法作用域 Function Scope
console.log(foo1); // 1
console.log(foo2); // 2
}
f();
Block Scope 代碼塊作用域
在下面的代碼中可以看到 var
與 let
語句聲明變量的區(qū)別:
function f() {
var foo1 = 1; // Function Scope
{
let foo1 = 2; // Block Scope
let foo2 = 3; // Block Scope
console.log(foo1); // 2
console.log(foo2); // 3
}
console.log(foo1); // 1
console.log(foo2); // foo2 is not defined
}
f();
如果將 let foo1 = 2; let foo2 = 3;
換成 var foo1 = 2; var foo2 = 3;
熬尺,則都變成 Function Scope夺欲。
引用:
let