ES6基础入门-03.let命令的特性——不存在变量提升,暂时性死区,不允许重复声明
不存在变量提升
var
命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined
。
let
命令不存在变量提升的行为,它所声明的变量一定要在声明后使用,否则报错。
例:
暂时性死区
只要块级作用域内存在let
命令声明变量之前,该变量都是不可用的。
这在语法上,称为“暂时性死区” temporal dead zone,简称 TDZ。
例:
有些“死区”比较隐蔽,不太容易发现。
例:
上面代码中,调用foo
函数之所以报错(某些实现可能不报错),是因为参数x
默认值等于另一个参数y
,而此时y
还没有声明,属于”死区“。如果y
的默认值是x
,就不会报错,因为此时x
已经声明了。
例:
另外,下面的代码也会报错,与var
的行为不同。
例:
上面代码报错,也是因为暂时性死区。使用let
声明变量时,只要变量在还没有声明完成前使用,就会报错。上面这行就属于这个情况,在变量x
的声明语句还没有执行完成前,就去取x
的值,导致报错”x 未定义“。
不允许重复声明
let
不允许在相同作用域内,重复声明同一个变量。
例:
因此,不能在函数内部重新声明参数。
例: