(一) es6中的暂时性死区
简单理解暂时性死区
暂时性死区:Temporal Dead Zone
简称 TDZ
在ES6中, 引入了 let
和 const
两个新的命令, 并且使用这两个命令定义的变量不存在变量提升, 且使用let
和const
声明变量之前, 该变量都是不可用的, 这在语法上被称为 暂时性死区
console.log(a)
let a = 100 // ReferenceError
什么意思呢? 就是说es6给这种错误设定了一个专有名词叫 暂时性死区
, 其实它就是简简单单的指的是一个语法错误而已
在读阮一峰老师的《ES6标准入门 第3版》时看到:
function bar(x = y, y = 2) {
return [x, y]
}
bar()
书中提到: 调用bar之所以报错, 是因为参数x的默认值是y,而此时y还没有声明, 属于 死区
个人感觉这就是单纯的一个对未声明变量的使用, 无论是在es5还是es6中, 都是一个错误, 而对于暂时性死区
的说法,是在es6中被引入的, 所以我觉得书中关于这个例子的说法是不正确的
暂时性死区带来的 typeof判断问题
在es6之前, 我们可以通过typeof
来判断一个变量的类型, 无论变量有没有被声明
console.log(typeof x) // undefined
console.log(typeof a) // undefined
var a
但是在es6中
console.log(typeof a) // undefined
let a // ReferenceError: Cannot access 'a' before initialization
这是一个需要注意的点, 个人感觉es6的很多新特性, 都是为了解决之前版本的遗留问题而出的新规定
仅记录自己的学习总结,如有错误,还请评论指正~