簡體   English   中英

ES6為什么我可以在循環中定義時重新分配常量

[英]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);
        }

這是預期的行為,任何人都可以解釋為什么會發生這種情況,循環中的聲明是否不同?

在此輸入圖像描述


Statements / const更新

此聲明創建一個常量,該常量可以是聲明它的函數的全局或局部。 常量是塊范圍的。

當您修改“不可變綁定”時, 當前草稿僅在嚴格模式下拋出:

正如@kangax指出的那樣,一個常量的重新分配應該總是拋出,因為const在( 這里 )創建了一個帶有strict標志的“不可變綁定”:

如果d的IsConstantDeclaration為真,那么

調用env的CreateImmutableBinding具體方法,傳遞dn和true作為參數。

然后

SetMutableBinding(N,V,S)......

  1. 否則,如果envRec中N的綁定是可變綁定,則將其綁定值更改為V.
  2. 否則,這必須是嘗試更改不可變綁定的值,因此如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM