Estoy leyendo sobre cierres, y encontré estos pequeños ejercicios que resolví por casualidad, pero no entiendo por qué funcionan.
El ejercicio es:
for (var i = 0; i < 3; i++) { setTimeout(function log() { console.log(i); // What is logged? }, 1000); } Obtengo que 3 se imprimirá 3 veces porque el valor capturado por log() cuando finaliza for() .
Además, me preguntaron cómo arreglarlo para que la consola imprimiera 0,1,2 , y encontré (por casualidad, para ser honesto), que funciona haciendo: for ( let i =0 ...
Pero supongo que porque Let tiene un alcance de bloque, pero realmente no sé cómo explicarlo en palabras simples.
Las variables definidas con let tienen un alcance bloqueado, lo que significa que una vez que sale del soporte, pierde su valor y si intenta acceder, arrojará un error. Entonces, cuando for está ejecutando, presento en i console.log() almacenará el valor como 0,1, etc.
mientras que en la parte var, la var se almacenará en la memoria y cuando el tiempo de espera esté a punto de expirar, accederá a la variable i en la memoria e imprimirá lo que haya para esa variable en ese momento.