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;
// 不报错
}
}
|