Javascript 为什么`循环的` for…in`和` for…内的` const'值发生了变化?

Javascript 为什么`循环的` for…in`和` for…内的` const'值发生了变化?,javascript,ecmascript-6,constants,Javascript,Ecmascript 6,Constants,是块范围的,很像使用let语句定义的变量。常量的值不能通过重新赋值来更改,也不能重新声明 根据的规定,常量的值不能通过重新赋值而改变,也不能重新声明,,所以中的和中的的如何工作 const data=['A','B','C','D']; //这里常量键被更改 for(常量输入数据){ console.log('key',key); } //此处常量值已更改 for(数据的常量值){ console.log('value',value); }循环的每个迭代都有自己的块范围 for(let i

是块范围的,很像使用let语句定义的变量。
常量的值
不能通过重新赋值来更改,也不能
重新声明

根据的规定,
常量的值不能通过重新赋值而改变,也不能
重新声明,
,所以
中的
中的
如何工作

const data=['A','B','C','D'];
//这里常量键被更改
for(常量输入数据){
console.log('key',key);
}
//此处常量值已更改
for(数据的常量值){
console.log('value',value);

}
循环的每个迭代都有自己的块范围

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

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

你引用的材料的前三个词解释了这一点

常数是块范围的


每次在
for
循环中循环,都会到达一个干净块的顶部。对它所做的第一件事是在其内部创建一个常量。

for of loop
中,这些常量是为每次迭代声明的(在独立的范围内),而在
for loop
中,您使用的是变量,因此在声明后无法重新赋值

循环的
示例

const data=['A','B','C','D'];
对于(常数i=0;i}
JavaScript
const
是我见过的使用类似术语的任何语言中最小的常量。它不是编译时常数,就像C语言或C++一样。@杰姆斯是的,JS是一种解释性语言。@乔纳斯,这不是一个真正的论点;即使JS有一个编译步骤,即使没有编译步骤,常量也可能是不可变的。@deceze我想是的。与C++相比,JavaScript非常有动态性,这是因为它被解释。编译语言不可能是动态的(没有太多开销),PHP证明了它可以被解释并具有常量。我相信其他语言也一样。这些属性不相关。的可能重复项