Sobes.tech
Junior

Zu welchen Konsequenzen kann die Deklaration einer Variablen mit var innerhalb einer Funktion führen?

sobes.tech KI

Antwort von AI

Die Deklaration einer Variablen mit var innerhalb einer Funktion hat eine funktionale Gültigkeit. Das bedeutet, dass diese Variable in der gesamten Funktion verfügbar ist, wobei Blockbereiche (z.B. innerhalb von if oder for) ignoriert werden.

Folgen:

  • Variablenüberschreibung: Eine mit var deklarierte Variable in einem Block kann eine vorher in derselben Funktion deklarierte Variable mit demselben Namen überschreiben, aber außerhalb dieses Blocks.
  • Hoisting: Die Deklaration einer Variablen mit var wird an den Anfang der Funktion gehoben. Das bedeutet, dass die Variable vor ihrer Deklaration verwendet werden kann, aber ihr Wert zu diesem Zeitpunkt undefined ist.
  • Unerwartetes Verhalten in Schleifen: In for-Schleifen mit asynchronen Operationen (z.B. setTimeout) hat die mit var deklarierte Variable für alle asynchronen Callback-Funktionen den letzten Wert des Schleifendurchlaufs, nicht den Wert zum Zeitpunkt der Iteration.

Beispiel für Hoisting und Überschreibung:

function beispielVarScope() {
  console.log(a); // undefined (aufgrund des Hoistings)
  var a = 10;
  if (true) {
    var a = 20; // Überschreibt die äußere Variable 'a'
    console.log(a); // 20
  }
  console.log(a); // 20 (Wert aus dem if-Block)
}

beispielVarScope();

Beispiel mit Schleife und asynchronen Operationen:

function beispielSchleifeVar() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function() {
      console.log(i); // Gibt 3, 3, 3 aus (i hat den letzten Wert des Schleifendurchlaufs)
    }, 100);
  }
}

beispielSchleifeVar();

Aufgrund dieser Eigenschaften wird empfohlen, let oder const zu verwenden, die Blockscope haben, um unerwartete Situationen zu vermeiden.