Si ejecuto este código, entonces la consola 4 a las 5, ¿alguien puede explicar por qué sucede?
let number = 1; for (var i=0; i<5; i++){ number=i; setTimeout(()=>{ console.log(number) },1000) }Además, si modifico esto como se muestra a continuación, ¿la salida es 5 veces 5?
for (var i=0; i<5; i++){ setTimeout(()=>{ console.log(i) },1000) }¿Y por qué imprime de 0 a 4 cuando usamos let like?
for (let i=0; i<5; i++){ setTimeout(()=>{ console.log(i) },1000) }Es un caso de uso típico de var como ámbito funcional, cada iteración de for loop comparte el mismo valor de var (no crea un nuevo ámbito ya que var es un ámbito funcional) que es algo global aquí
así que cuando llega la última condición i<5 i ya se ha convertido en 4, y cada devolución de llamada de setTimeout lo comparte para que todos se impriman 4,4 veces
Pero en caso de que se forme un nuevo alcance en cada iteración, ya que es un alcance de bloque (for loop has a block scope)