Junior
Tot welke gevolgen kan het leiden om een variabele te declareren met var binnen een functie?
sobes.tech AI
Antwoord van AI
Het declareren van een variabele met var binnen een functie heeft function scope. Dit betekent dat zo'n variabele beschikbaar is in de hele functie, ongeacht blokscope (bijvoorbeeld binnen if of for).
Gevolgen:
- Overschrijven van variabelen: Een met
vargedeclareerde variabele in een blok kan een eerder in dezelfde functie gedeclareerde variabele met dezelfde naam overschrijven, maar buiten dat blok. - Hoisting: De declaratie van een variabele met
varwordt naar het begin van de functie gehaald. Dit betekent dat je de variabele kunt gebruiken voordat deze gedeclareerd is, maar de waarde op dat momentundefinedzal zijn. - Onverwacht gedrag in lussen: In
for-lussen met asynchrone operaties (bijvoorbeeldsetTimeout) krijgt de metvargedeclareerde variabele voor alle asynchrone callbacks de laatste waarde van de lus, niet de waarde op het moment van de iteratie.
Voorbeeld van hoisting en overschrijven:
function voorbeeldVarScope() {
console.log(a); // undefined (door hoisting)
var a = 10;
if (true) {
var a = 20; // Overschrijft de externe variabele 'a'
console.log(a); // 20
}
console.log(a); // 20 (waarde uit de if-blok)
}
voorbeeldVarScope();
Voorbeeld met lus en asynchrone operaties:
function voorbeeldLusVar() {
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // Print 3, 3, 3 (i heeft de laatste waarde van de lus)
}, 100);
}
}
voorbeeldLusVar();
Vanwege deze eigenschappen wordt aanbevolen om let of const te gebruiken, die blokscope hebben, om onverwachte situaties te voorkomen.