Sobes.tech
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 var en 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 var se 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 for con operaciones asíncronas (por ejemplo, setTimeout), la variable declarada con var tendrá 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.