Sobes.tech
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 var gedeclareerde 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 var wordt naar het begin van de functie gehaald. Dit betekent dat je de variabele kunt gebruiken voordat deze gedeclareerd is, maar de waarde op dat moment undefined zal zijn.
  • Onverwacht gedrag in lussen: In for-lussen met asynchrone operaties (bijvoorbeeld setTimeout) krijgt de met var gedeclareerde 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.