javascript - Node 和 Chrome (V8) block 范围内的 const

标签 javascript node.js scope constants 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 - 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/

相关文章:

c# - 使用 jQuery 将 HTML 表格导出为 MS Excel 格式

javascript - 未启用 Javascript 时的替代 anchor 标记

node.js - 如何让值对象远离服务器?

javascript - 在 AngularJS 中查找最近的元素

javascript - 使用 Node js将mysql结果解析为变量

javascript - 使用 Ed25519 KeyPair 对 JWS(json web 签名)进行签名和验证

javascript - JavaScript 中良好的范围界定方式

variables - 如何在 kotlin 中修改其范围之外的变量?

python - 在 try,catch,finally 语句中使用变量而不在外部声明它

javascript - 提交后如何清除表单