Junior
¿A qué consecuencias puede llevar la declaración de una variable usando var dentro de una función?
sobes.tech AI
Respuesta de la IA
La declaración de una variable con var dentro de una función tiene un alcance funcional. Esto significa que dicha variable está disponible en toda la función, ignorando los ámbitos de bloque (por ejemplo, dentro de if o for).
Consecuencias:
- Sobrescritura de variables: Una variable declarada con
varen un bloque puede sobrescribir una variable con el mismo nombre declarada previamente en la misma función, pero fuera de ese bloque. - Elevación (Hoisting): La declaración de una variable con
varse eleva al inicio de la función. Esto significa que se puede usar la variable antes de su declaración, pero su valor en ese momento seráundefined. - Comportamiento inesperado en bucles: En bucles
forcon operaciones asíncronas (por ejemplo,setTimeout), la variable declarada convartendrá el último valor del ciclo para todos los callbacks asíncronos, no el valor en el momento de la iteración.
Ejemplo de elevación y sobrescritura:
function ejemploAlcanceVar() {
console.log(a); // undefined (por hoisting)
var a = 10;
if (true) {
var a = 20; // Sobrescribe la variable externa 'a'
console.log(a); // 20
}
console.log(a); // 20 (valor del bloque if)
}
ejemploAlcanceVar();
Ejemplo con bucle y operaciones asíncronas:
function ejemploBucleVar() {
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // Imprimirá 3, 3, 3 (i tiene el último valor del ciclo)
}, 100);
}
}
ejemploBucleVar();
Debido a estas características, para evitar situaciones imprevistas, se recomienda usar let o const, que tienen un alcance de bloque.