javascript scope ecmascript-6 const let

¿Por qué funciona const en algunos bucles for en JavaScript?



scope ecmascript-6 (2)

por qué const no funciona en for-loops. Necesitamos crear un nuevo alcance y copiar un valor en eso. Así que esto no va a volar.

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

Mientras que esto lo hará.

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

Sin embargo, me di cuenta de que ambos funcionan al recorrer en bucle las propiedades de un objeto como este.

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

No estoy seguro de por qué.


En su primer ejemplo, i se modifica a través de i++ . Una const no se puede modificar, por lo que recibe un error.

En el segundo ejemplo, la property se redefine para cada iteración (cada instancia queda fuera del alcance y se crea una nueva en lugar de solo reasignarse a la misma variable) del bucle for . Ya que en realidad estás redefiniendo en lugar de modificar el valor, const funciona bien.


for (const property in object) funciona porque con cada iteración se obtiene una nueva variable, que está incluida solo en esa iteración. Puede verificarlo fácilmente utilizando un cierre dentro de un bucle:

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

Esto registra a y b , pero si cambia const a var , registra b dos veces.