【发布时间】:2016-03-17 05:34:09
【问题描述】:
我曾尝试在 Firefox V30.0 Scratchpad 中执行以下代码:
function do_something() {
console.log(foo); // ReferenceError
let foo = 2;
}
do_something();
预期的行为是我的程序应该抛出引用错误,因为我在声明之前访问了let 变量。但是,我没有得到预期的行为,程序被执行,结果如下
undefined
你能解释一下,它为什么会这样吗?
【问题讨论】:
-
据我所知,
let声明的变量仍然被提升,与var相同,只是在它们的块顶部,而不是函数。 -
@JamesThorpe - 声明被提升,但由于临时死区,在初始化之前引用它们的任何尝试都应该抛出。
-
你能不能在“严格模式”下运行代码,看看是否有什么变化,在我看来,预期的结果是抛出......变量提升只有在你使用 var 关键字时才会发生......
-
@JamesAllardice 嗯,很有趣。有人想知道为什么它们会被吊起来。这是否意味着它是 Firefox 实现中的一个错误?
-
版本问题? caniuse.com/#search=let
标签: javascript ecmascript-6 let firefox-developer-tools