问题
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