ECMAScript 2015 时间死区 [重复]
Posted
技术标签:
【中文标题】ECMAScript 2015 时间死区 [重复]【英文标题】:ECMAScript 2015 Temporal Dead Zone [duplicate] 【发布时间】:2016-07-26 11:44:24 【问题描述】:我是 ECMAScript 2015(ES6) 的新手,我正在阅读 ES6 中的时间死区:
if(typeof x === "undefined")
console.log("x doesn't exist or is undefined");
else
// safe to refer to x....
let x = 5; //script.js:1 Uncaught ReferenceError: x is not defined
显然在 ES6 中,如果在声明变量之前使用 typeof 测试变量会引发错误
console.log(typeof x);
let x = 5; //script.js:1 Uncaught ReferenceError: x is not defined
为什么会这样?这是一个错误吗?
【问题讨论】:
"如果您测试变量" - 绝对没有理由这样做。您可以阅读相关代码并查看它是否在范围内声明。这总是可以静态确定的(由程序员或他的工具),没有必要(也没有办法)动态地做到这一点。 别再担心奥秘了,专注于如何编写好的程序,其中一个方面是在作用域的顶部声明你的变量。 【参考方案1】:事情就是这样:
Temporal dead zone and errors with let
在 ECMAScript 2015 中,
let
会将变量提升到块的顶部。但是,在变量声明之前引用块中的变量会导致ReferenceError。从块开始到处理声明,变量都处于“临时死区”中。
【讨论】:
因此,如果我不能在使用“let”声明变量之前使用该变量(这很明显),如何检查变量是否已定义? 显然这是一个问题,声明的变量来自未定义类型,直到应用了其他值。最好的建议是尽快使用未定义的值,也许是 null。以上是关于ECMAScript 2015 时间死区 [重复]的主要内容,如果未能解决你的问题,请参考以下文章