我在编写一个 nodejs (v4.2.4) 应用程序时遇到了一些奇怪的行为。
function A(number) {
this.number = number;
}
for(var i = 0; i < 3; i++) {
const a = new A(i);
console.log(a.number);
}
const b = new A(99);
console.log(b.number);
我的直觉,来自 Java(和 FireFox 之一),输出应该是
0
1
2
99
但是,Node(和 Chrome)给我
0
0
0
99
我是从MSN - block scope调查了解的var
在 javascript 中没有 block 作用域。进一步看,MSN - const尽管将 const 声明描述为具有 block 作用域:
Constants are block-scoped, much like variables defined using the let statement. The value of a constant cannot change through re-assignment, and it can't be redeclared.
在那种情况下,我会说 Node 和 Chrome(在这种情况下可能是 V8)在 block 作用域中对 const
进行了某种可疑的处理。但他们也这样写
This declaration creates a constant that can be either global or local to the function in which it is declared.
这是否意味着 V8 将每个 const
声明作为一个全局变量,而 FireFox 创建一个本地变量?像这样至关重要的事情怎么会以如此不同的方式实现?
最佳答案
v8 需要 use strict
指令来启用此行为。这在最新版本中已更改:http://v8project.blogspot.ru/2016/01/v8-release-49.html
引用:
Release 4.9 also makes block level constructs such as class and let available outside of strict mode
这也适用于 const
关于javascript - Node 和 Chrome (V8) block 范围内的 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234850/