[英]ES6 why can I reassign a constant when defined in a loop
我正在玩一些毫無意義的邏輯來更好地理解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);
}
這是預期的行為,任何人都可以解釋為什么會發生這種情況,循環中的聲明是否不同?
此聲明創建一個常量,該常量可以是聲明它的函數的全局或局部。 常量是塊范圍的。
當您修改“不可變綁定”時, 當前草稿僅在嚴格模式下拋出:
正如@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.
(目前尚不清楚為什么這是“SyntaxError”)...
在非嚴格模式下,靜默忽略對常量的賦值:
const e = 0;
e = 42;
console.log(e); // 0
經測試與節點v0.10.35 --harmony
標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.