暂时性死区

  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

暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
感谢阮一峰大神

 
原文地址:https://www.cnblogs.com/fordouble/p/7064973.html