Why does const work in some for-loops in JavaScript?

南楼画角 提交于 2021-02-04 10:04:03

问题


I do know why const doesn't work in for-loops. We need to create a new scope and copy over a value into that. So this won't fly.

for(const i = 0; i < 5; i++) console.log(i);

Whereas this will.

for(let i = 0; i < 5; i++) console.log(i);

However, I noticed that both of them work when looping though the properties of an object like this.

for(let property in thingy) console.log(property);
for(const property in thingy) console.log(property);

I'm not sure why.


回答1:


for (const property in object) works because with each iteration you get a new variable, which is scoped only to that iteration. You can easily check that by using a closure inside a loop:

for (const property in {a: 1, b: 2}) {
  setTimeout(() => {
    console.log(property);
  }, 100);
}

This logs a and b, but if you change const to var, it logs b twice.




回答2:


In your first example, i is modified via the i++. A const can't be modified, so you get an error.

In the second example, property is re-defined for each iteration (each instance falls out of scope and a new one created rather than just re-assigning to the same variable) of the for loop. Since you're actually re-defining rather than modifying the value, const works just fine.



来源:https://stackoverflow.com/questions/41067790/why-does-const-work-in-some-for-loops-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!