0

Estoy empezando con javascript y no entiendo por qué sale 3 veces 3 y no me sale 0,1,2..

Me lo podrían explicar?

const f = function() {
for (var i = 0; i<3 ; i++){
setTimeOut( 
() => console.log(i),
1000)
}
}
f()

En cambio, en este otro si que aparece en orden 0,1,2..

const f = function () 
{for (var i=0; i<3; i++) {  
     ((c)  => {setTimeout( 
            () =>console.log(c), 
            5)   })(i)
     }
    }
f()

Gracias de antemano!

Anonymous
  • 1
  • 1
  • ¿Responde esto a tu pregunta? [var, let, const... o nada en Javascript](https://es.stackoverflow.com/questions/106042/var-let-const-o-nada-en-javascript) – Triby Jun 24 '20 at 22:44

1 Answers1

1

Pasa por 2 cosas,

La primera como bien te ha dicho nuestro compañero @Triby, se debe al scope al que pertenece cada tipo de dato var, let, const... el link que te dejaron lo explica bastante bien.

El segundo motivo es la velocidad a la que se procesa tu script, el loop que has probado se procesa en escasos milisegundos, dado que var es modificable desde cualquier parte de la función, para cuando llega a ejecutarse el primer setTimeout todo el loop ya se ejecuto y la variable ya es igual a 3

Arturo Gallegos
  • 1,109
  • 3
  • 4