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

我写了一个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的调查和了解块范围 ,该var在JavaScript中没有块范围。 进一步来看 , MSN – const将const声明描述为具有块范围:

常量是块范围的,就像使用let语句定义的variables一样。 一个常量的值不能通过重新赋值而改变,并且不能被重新声明。

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

这个声明创build一个常量,它可以是声明它的函数的全局或局部的。

这是否意味着V8将每个const声明作为一个全局variables,而FireFox创build一个本地variables? 怎么可能这样重要的东西实现如此不同呢?

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

引用:

版本4.9也使块级结构,如类和让严格模式之外的可用

这也应该适用于const

Chrome默认不支持ES6。 您引用的常量行为是来自ES6规范。

在Chrome中奇怪的const行为是不标准的,在ES5(也就是根本就没有这个特性)和ES6中都没有。

基本testing失败: https : //kangax.github.io/compat-table/es6/

const必须有本地,块范围。