ES6 let命令:
用来声明变量。语法类似于var,但是所声明的变量,只能在let命令所在的代码块内有效。
for循环的计数器,很适合使用let命令
for循环的特别之处,设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
不存在变量提升
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。
为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明之后使用,不然就会报错。
暂时性死区
只要块级作用域内存在let命令,它所声明的变量就绑定在这个区域,不收外部影响。
如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
使用ket命令声明变量之前,该变量都是不可用的。这在语法上,成为“暂时性死区”(temporal dead zone,TDZ)
在let命令声明变量tmp之前,都属于变量tmp的“死区”。
“暂时性死区”也意味着typeof不再是一个百分百安全的操作。
有些“死区”比较隐蔽,不容易被发现。
调用bar函数会报错。这是因为参数x默认值等于另一个参数y,而此时y还没有声明。
网友评论