Sim*_*ton 9 javascript ecmascript-6
我正在玩一些毫无意义的逻辑来更好地理解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);
}
Run Code Online (Sandbox Code Playgroud)
这是预期的行为,任何人都可以解释为什么会发生这种情况,循环中的声明是否不同?

此声明创建一个常量,该常量可以是声明它的函数的全局或局部.常量是块范围的.
当您修改"不可变绑定"时,当前草稿仅在严格模式下抛出:
正如@kangax指出的那样,一个常量的重新分配应该总是抛出,因为在(这里)const创建一个带有strict标志的"不可变绑定" :
如果d的IsConstantDeclaration为真,那么
调用env的CreateImmutableBinding具体方法,传递dn和true作为参数.
并随后:
SetMutableBinding(N,V,S)......
- 否则,如果envRec中N的绑定是可变绑定,则将其绑定值更改为V.
- 否则,这必须是尝试更改不可变绑定的值,因此如果S为true则抛出TypeError异常.
但是,节点仅以严格模式抛出:
"use strict";
const e = 0;
e = 42; // SyntaxError: Assignment to constant variable.
Run Code Online (Sandbox Code Playgroud)
(目前尚不清楚为什么这是"SyntaxError")...
在非严格模式下,静默忽略对常量的赋值:
const e = 0;
e = 42;
console.log(e); // 0
Run Code Online (Sandbox Code Playgroud)
使用带有--harmony标志的节点v0.10.35进行测试.
| 归档时间: |
|
| 查看次数: |
1191 次 |
| 最近记录: |