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!)

Discussion (0)