Sobes.tech
Junior

Was ist der Unterschied zwischen var, let und const?

sobes.tech KI

Antwort von AI

var hat einen Funktionsbereich, während let und const einen Blockbereich haben. var kann neu deklariert und neu zugewiesen werden, let kann neu zugewiesen, aber nicht im selben Geltungsbereich neu deklariert werden, und const kann weder neu deklariert noch neu zugewiesen werden. Mit var deklarierte Variablen werden gehoben (hoisting) mit einer Initialisierung auf undefined, während let und const ebenfalls gehoben werden, aber in der "temporären toten Zone" verbleiben, bis sie initialisiert werden.

// var hat Funktionsbereich
function beispielVar() {
  if (true) {
    var x = 10;
    console.log(x); // 10
  }
  console.log(x); // 10 (x ist hier sichtbar)
}

// let und const haben Blockbereich
function beispielLetConst() {
  if (true) {
    let y = 20;
    const z = 30;
    console.log(y); // 20
    console.log(z); // 30
  }
  // console.log(y); // Fehler ReferenceError: y ist nicht definiert
  // console.log(z); // Fehler ReferenceError: z ist nicht definiert
}

// var kann neu deklariert und neu zugewiesen werden
var a = 1;
var a = 2; // Neue Deklaration
a = 3; // Neue Zuweisung
console.log(a); // 3

// let kann neu zugewiesen, aber nicht im selben Geltungsbereich neu deklariert werden
let b = 4;
// let b = 5; // Fehler SyntaxError: Bezeichner 'b' wurde bereits deklariert
b = 6; // Neue Zuweisung
console.log(b); // 6

// const kann weder neu zugewiesen noch neu deklariert werden
const c = 7;
// const c = 8; // Fehler SyntaxError: Bezeichner 'c' wurde bereits deklariert
// c = 9; // Fehler TypeError: Zuweisung an Konstante.
console.log(c); // 7 (bei primitiven Typen)

// Hoisting
console.log(hoistedVar); // undefined (var wurde gehoben und auf undefined initialisiert)
var hoistedVar = "Ich bin var";

// console.log(hoistedLet); // Fehler ReferenceError: Zugriff auf 'hoistedLet' vor Initialisierung nicht möglich
// let hoistedLet = "Ich bin let"; // In der temporären toten Zone

Die wichtigsten Unterschiede sind in der Tabelle zusammengefasst:

Eigenschaft var let const
Geltungsbereich Funktional Block Block
Neue Deklaration Ja Nein (im selben Geltungsbereich) Nein
Neue Zuweisung Ja Ja Nein (bei primitiven Typen)
Hoisting Ja (mit undefined) Ja (temporale tote Zone) Ja (temporale tote Zone)
Frühe Initialisierung Keine Initialisierung erforderlich Keine Initialisierung erforderlich Initialisierung erforderlich

Es ist wichtig zu beachten, dass für Objekte und Arrays, die mit const deklariert sind, die Variable selbst nicht auf ein anderes Objekt/Array umgeschrieben werden kann, aber der Inhalt des Objekts/Arrays verändert werden kann.

const meinObjekt = { key: 'value' };
// meinObjekt = { newKey: 'newValue' }; // Fehler TypeError: Zuweisung an Konstante.
meinObjekt.key = 'newValue'; // Möglich
console.log(meinObjekt); // { key: 'newValue' }

const meinArray = [1, 2];
// meinArray = [3, 4]; // Fehler TypeError: Zuweisung an Konstante.
meinArray.push(3); // Möglich
console.log(meinArray); // [ 1, 2, 3 ]