DEV Community

Veritechie
Veritechie

Posted on

🔥 El infierno de var

¿Que crees que imprimirá por pantalla este fragmento de código?

for (**var** i = 1; i <= 5; i++) {
    setTimeout(function() {
        console.log("Pues...",i);
    }, 1000);
}
Enter fullscreen mode Exit fullscreen mode

SPOILER….

…………

…………

…………

…………

…………

…………

…………

Si tu respuesta fue Pues...6 ¡estás en lo cierto!, además te aparecerá justo una línea más arriba un numerito que identifica el número de setTimeOut lanzado. Este es aleatorio y a priori no sirve para nada, ¡solo FYI!

¿Sabes por qué?

Cuando declaramos una función con*var, el ámbito es su *contexto de ejecución en curso*,* que puede ser la función que la contiene o un ámbito global. Entonces podemos esperarnos resultados inesperados. Es por eso que es mejor que intentes evitar declarar variables con la palabra var. ¡pasa de eso!.

Sin embargo… ¿que pasa si lanzamos este mismo fragmento de código?
Nótese el cambio de var por let

for (**let** i = 1; i <= 5; i++) {
    setTimeout(function() {
        console.log("Pues...",i);
    }, 1000);
}
Enter fullscreen mode Exit fullscreen mode

Sí amiguitos, ahora nos ejecuta el bucle tal y como deseamos. Gracias a la magia del scope, es una variable local que solamente está definida dentro de la función.

RECAP: ¡No al var, si al let! (o const!)

Top comments (0)