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创建本地变量?如此重要的事情如何以不同的方式实施呢?
v8需要use strict指令才能启用此行为.最新版本已更改:http://v8project.blogspot.ru/2016/01/v8-release-49.html
引用:
版本4.9还使块级构造(如类)在严格模式之外可用
这也应该适用于 const
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |