【发布时间】:2015-02-05 12:46:25
【问题描述】:
我正在玩一些毫无意义的逻辑来更好地理解 ES6,并且在定义常量时注意到了一个奇怪的现象。
在循环中定义时似乎可以更改常量赋值:
"use strict";
for(const i=0;i<10;i++){ //seting constant in loop
console.log(i); //is reassigned and incremented 0,1,2,3...
}
const e = 0; //setting constant outside loop
for(;e<10;e++){ //cannot reassign constant
console.log(e);
}
这是预期的行为吗?谁能解释为什么会发生这种情况,循环中的声明是否不同?
这个声明创建了一个常量,它可以是全局的,也可以是局部的 声明它的函数。常量是块范围的。
【问题讨论】:
-
哇,刚刚在 Chrome 版本 40.0.2214.94 上尝试过这个,它会生成一个无限循环,可能是因为该常量从未被静音。你用的是哪个浏览器?
-
这可能意味着 chrome 通过不重新分配它来使其正确(?但可能会抛出错误)并且仍然提升常量。在您的情况下,
const的行为似乎类似于letdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
在 Firefox 中我得到
TypeError: redeclaration of var i作为第一个例子 -
@BenjaminBlonde 我使用的是canary v42,如果你包含
"use strict";,它不会创建无限循环并且会递增