【发布时间】:2016-11-10 13:17:55
【问题描述】:
看看下面的代码:
var c = 50;
{
console.log(y);
let y = 50;
}
此代码预计会引发 ReferenceError,它确实会引发。但是在控制台中,带有异常的消息让我大吃一惊。它说:
ReferenceError: 在初始化之前无法访问词法声明'c'
在代码中c 是第一个声明的变量。错误消息表明c 的声明有问题。显然是块内的y 变量导致了异常。我们不能在声明之前使用使用let 声明的变量。当我在第一行声明另一个变量时,比如test,错误消息变为:
ReferenceError: 在初始化之前无法访问词法声明“test”
我是否遗漏了什么或者我对错误的看法是正确的?我有最新的 Firefox 开发者版(49.0a2 版)。
另一件值得注意的事情是块只是一个封闭块,它不是函数的主体。
【问题讨论】:
-
如果您认为这是一个错误,请提交错误报告,他们会说是或否。
-
发布版本 47.0.1 中也存在该错误
-
最少的代码是
var x; { y; let y; } -
@Oriol 我报告了这个错误。这是链接:bugzilla.mozilla.org/show_bug.cgi?id=1285710
-
是的,我在 54.0a2 版本中对此进行了测试,请参阅
ReferenceError: can't access lexical declaration 'y' before initialization。我投票关闭它,因为它不能再被复制了。
标签: javascript firefox console.log referenceerror firefox-developer-edition