(一) es6中的暂时性死区

简单理解暂时性死区

暂时性死区:Temporal Dead Zone 简称 TDZ

在ES6中, 引入了 letconst 两个新的命令, 并且使用这两个命令定义的变量不存在变量提升, 且使用letconst声明变量之前, 该变量都是不可用的, 这在语法上被称为 暂时性死区

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的很多新特性, 都是为了解决之前版本的遗留问题而出的新规定

posted @ 2021-07-29 21:35  只猫  阅读(1048)  评论(0编辑  收藏  举报