为什么`const`值在`for ... in`和`for ... of`循环中改变了?

时间:2018-04-06 13:37:21

标签: javascript ecmascript-6 const

  

Constants是块作用域的,就像使用let语句定义的变量一样。 constant的值不能通过重新分配进行更改,而且不能redeclared

根据MDN constant的值无法通过重新分配进行更改,并且不能redeclared < / strong>,所以在for...infor...of内部如何工作?

&#13;
&#13;
const data = ['A', 'B', 'C', 'D'];

//Here const key is changed
for (const key in data) {
  console.log('key ',key);
}

//Here const value is changed
for (const value of data) {
  console.log('value ',value);
}
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:7)

循环的每次迭代都有自己的块范围。

 for(let i = 0; i < 10; i++)
   setTimeout(() => console.log(i), 1);

这创建了10个单独的范围,这就是为什么它会记录10个不同的数字。因此,您还可以在这些不同的范围中声明常量。

答案 1 :(得分:4)

您引用的材料的前三个字解释了。

  

常量是块范围的

每次绕过for循环,都会转到一个干净的块的顶部。你要做的第一件事就是在里面创建一个常量。

答案 2 :(得分:1)

for-of-loop中,每个迭代都会声明这些常量(在独立范围内),而在for-loop中你重新使用变量,所以你不会成为能够在声明后重新赋值。

for-loop

的示例

&#13;
&#13;
const data = ['A', 'B', 'C', 'D'];

for (const i = 0; i < data.length; i++) {
  console.log('value ',data[i]);
}
&#13;
&#13;
&#13;