Node和Chrome中的块范围内的const(V8)

Phi*_*ipp 4 javascript scope v8 const node.js

我正在写一个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);
Run Code Online (Sandbox Code Playgroud)

来自Java(和FireFox之一)的直觉是输出应该是

0
1
2
99
Run Code Online (Sandbox Code Playgroud)

但是,Node(和Chrome)给了我

0
0
0
99
Run Code Online (Sandbox Code Playgroud)

我调查和了解MSN -块范围var没有在JavaScript块范围.进一步看,MSN-const将const声明描述为具有块范围:

常量是块范围的,非常类似于使用let语句定义的变量.常量的值不能通过重新赋值来改变,也不能重新声明.

在这种情况下,我会说Node和Chrome(在这种情况下可能是V8),const在块范围内有一些阴暗的处理.但他们也写了这个

此声明创建一个常量,该常量可以是声明它的函数的全局变量或局部变量.

这是否意味着V8将每个const声明作为全局变量,而FireFox创建本地变量?如此重要的事情如何以不同的方式实施呢?

vku*_*kin 5

v8需要use strict指令才能启用此行为.最新版本已更改:http://v8project.blogspot.ru/2016/01/v8-release-49.html

引用:

版本4.9还使块级构造(如类)在严格模式之外可用

这也应该适用于 const