es6 let命令声明变量,有个暂时性死区的坑。
不是大问题,只是形成机制有意思,他在变量所在的代码块 内 也就是作用域内,
如果代码还未执行到声明变量那行,对这个变量的操作时会丢出错误的。
var tmp = 123;
if (true) {
tmp = 'abc'; // => ReferenceError
let tmp;
}
甚至于他对typeof 也会丢出错误,通常未声明的变量,会提示undefined;而不是丢出错误;
function bar(x = y, y = 2) {
return [x, y];
}
bar(); // 报错
甚至于:
// 不报错 var x = x; // 报错 let x = x; // ReferenceError: x is not defined
暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
感谢阮一峰大神