【发布时间】:2015-08-09 07:20:50
【问题描述】:
我在玩新的 ECMASCRIPT-6 const 关键字。我不理解关键字的一种特定行为。
假设我有两个功能
第一种情况
(function(){
console.log(_t);
const _t=10;
})();
和 第二种情况
function t(){
console.log(_y);
const _y=11;
}
t();
对于第一种情况,输出是(不明白为什么)
ReferenceError: 在初始化之前无法访问词法声明 `_t'
对于第二种情况,输出是(很好)
未定义
第二种情况的输出符合预期,但我不知道为什么第一种情况的结果会引发错误。从错误中可以推断出变量没有被提升。但为什么?我发现here const 使用block scope。它与这个范围界定有什么关系吗?
我正在使用 Firefox 开发者版控制台运行测试。
【问题讨论】:
-
你遇到了temporal dead zone,它还没有完全跨浏览器实现。
-
请参阅Are variables declared with let or const not hoisted in ES6?,了解它应该如何工作。我无法解释第二种行为 - 对我来说似乎是一个错误。
-
您是否在外部范围内定义了任何
_y(在其他运行的代码中),当您在干净的环境中仅运行这两个sn-ps时会发生同样的事情吗?
标签: javascript scope constants ecmascript-6 hoisting