let
es6新增了let命令,用來聲明變量。它的用法類似於var,但是所聲明的變量,只在let命令所在的代碼塊內有效。
不存在變量提升
var
命令會發生”變量提升“現象,即變量可以在聲明之前使用,值為undefined
。這種現象多多少少是有些奇怪的,按照一般的邏輯,變量應該在聲明語句之后才可以使用。
為了糾正這種現象,let
命令改變了語法行為,它所聲明的變量一定要在聲明后使用,否則報錯。
1
2
3
4
5
6
7
|
// var 的情況
console.log(foo);
// 輸出undefined
var
foo = 2;
// let 的情況
console.log(bar);
// 報錯ReferenceError
let
bar = 2;
|
上面代碼中,變量foo
用var
命令聲明,會發生變量提升,即腳本開始運行時,變量foo
已經存在了,但是沒有值,所以會輸出undefined
。變量bar
用let
命令聲明,不會發生變量提升。這表示在聲明它之前,變量bar
是不存在的,這時如果用到它,就會拋出一個錯誤。
不允許重復聲明
let
不允許在相同作用域內,重復聲明同一個變量。
1
2
3
4
5
6
7
8
9
10
11
|
// 報錯
function
func() {
let
a = 10;
var
a = 1;
}
// 報錯
function
func() {
let
a = 10;
let
a = 1;
}
|
因此,不能在函數內部重新聲明參數
1
2
3
4
5
6
7
8
9
|
function
func(arg) {
let
arg;
// 報錯
}
function
func(arg) {
{
let
arg;
// 不報錯
}
}
|