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
vareste ridicată la începutul funcției. Aceasta înseamnă că poți folosi variabila înainte de declarație, dar valoarea sa în acel moment va fiundefined. - Comportament neașteptat în bucle: În buclele
forcu operații asincrone (de exemplu,setTimeout), variabila declarată cuvarva 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.