【发布时间】:2017-08-26 16:57:18
【问题描述】:
这段代码运行良好:
const a = 1;
{
const b = a; // let's use "a" in a sub-scope
}
{
const a = 2; // let's override "a" in another sub-scope
}
...但此代码在第 3 行以 a is not defined 失败:
const a = 1;
{
const b = a; // let's use "a" in a sub-scope <<< CRASH!! >>>
const a = 2; // let's override "a" in the same sub-scope
}
我在node 7.7.4 上对此进行了测试。它可能仅与 V8 有关,我很好奇 Firefox 将如何处理。
是否与JS规范中定义变量声明的方式有关? const/let 没有被提升,但“某物”(一些元数据?)似乎仍然被提升,否则我们不会有任何问题。
【问题讨论】:
-
所有声明在 JavaScript 中被提升到其作用域的顶部。对于
const和let,这是范围块。