临时死区
JavaScript引擎在扫描代码发现变量声明时,要么将它们提升至作用域顶部(var声明),要么将声明放到TDZ中(let、const)。访问TDZ中的变量会触发运行时错误。只有执行过变量声明语句后,变量才会从TDZ中移除,然后正常访问。即便是相对不易出错的typeof操作符也是无法阻挡引擎抛出错误。但在声明的作用域外对该变量使用typeof则不会报错,
console.log(typeof value); //undefined
if(condition){
let value ='blue';
}
typeof在声明的块作用域外执行,此时value并不在TDZ中。也就意味着不存在value这个绑定,最终返回undefined。