Sobes.tech
Junior

La ce consecințe poate duce declararea unei variabile folosind var în interiorul unei funcții?

sobes.tech AI

Răspuns de la AI

Declararea unei variabile cu var în interiorul unei funcții are un scop funcțional. Aceasta înseamnă că variabila este disponibilă în întreaga funcție, ignorând scopurile de bloc (de exemplu, în interiorul if sau for).

Consecințe:

  • Suprascrierea variabilelor: O variabilă declarată cu var într-un bloc poate suprascrie o variabilă cu același nume declarată anterior în aceeași funcție, dar în afara acestui bloc.
  • Hoisting (ridicare): Declararea unei variabile cu var este ridicată la începutul funcției. Aceasta înseamnă că poți folosi variabila înainte de declarație, dar valoarea sa în acel moment va fi undefined.
  • Comportament neașteptat în bucle: În buclele for cu operații asincrone (de exemplu, setTimeout), variabila declarată cu var va avea ultima valoare a buclei pentru toate callback-urile asincrone, nu valoarea la momentul iterației.

Exemplu de hoisting și suprascriere:

function exempluScopeVar() {
  console.log(a); // undefined (din cauza hoisting)
  var a = 10;
  if (true) {
    var a = 20; // Suprascrie variabila externă 'a'
    console.log(a); // 20
  }
  console.log(a); // 20 (valoarea din blocul if)
}

exempluScopeVar();

Exemplu cu buclă și operații asincrone:

function exempluBuclaVar() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function() {
      console.log(i); // Va afișa 3, 3, 3 (i are ultima valoare a buclei)
    }, 100);
  }
}

exempluBuclaVar();

Din cauza acestor caracteristici, se recomandă utilizarea let sau const, care au scop de bloc, pentru a evita situații neașteptate.