我正在编写一个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-- 块范围 that var
JavaScript 中没有块作用域。进一步看,MSN-常量不过,将 const 声明描述为具有块作用域:
常量是块作用域的,很像使用 let 语句定义的变量。常量的值不能通过重新赋值而改变,也不能被重新声明。
在这种情况下,我会说 Node 和 Chrome(在这种情况下可能是 V8)对const
在块作用域中。但他们也写道
此声明创建一个常量,对于声明它的函数来说,该常量可以是全局常量,也可以是局部常量。
这是否意味着 V8 将所有const
声明为全局变量,而 FireFox 创建本地变量?如此重要的事情怎么会以如此不同的方式实施呢?
v8 需要use strict
指令来启用此行为。这在最新版本中发生了变化:http://v8project.blogspot.ru/2016/01/v8-release-49.html
Quote:
版本 4.9 还使块级构造(例如 class 和 let)在严格模式之外可用
这也应该适用于const
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)