💡 1. Praxis-Einstieg: Warum modernes JavaScript kein var mehr nutzt
In älterem JavaScript führte das Schlüsselwort var durch Funktions-Scoping und stilles Hoisting regelmäßig zu schwer auffindbaren Bugs.
Seit ECMAScript 2015 (ES6) gilt der Strict Immutability Default:
const(Standard): Immer verwenden, es sei denn, der Wert muss später zwingend neu zugewiesen werden. Verhindert unbeabsichtigtes Überschreiben.let: Nur verwenden, wenn die Variable ihren Wert ändern muss (z. B. Schleifenzähler oder Akkumulatoren).var(Deprecated): Veraltet. Erzeugt globale Leaks und ignoriert Blockgrenzen (if,for).
Modernes ES6+ vs. Legacy JavaScript
// ✅ Best Practice: const für unveränderliche Bindungen
const maxRetries = 3;
const apiEndpoint = "https://api.portal.local/v1";
// ✅ let für Werte mit Lebenszyklus-Änderung
let currentAttempt = 0;
currentAttempt += 1;
// ⚡ Moderne String-Interpolation mit Backticks (Template Literals):
const logMessage = `[API] Versuch ${currentAttempt} von ${maxRetries} an ${apiEndpoint}`;
console.log(logMessage);
⚡ 2. Quick-Cheat-Sheet: Variablen & Typen auf einen Blick
| Merkmal | const |
let |
var (Veraltet) |
|---|---|---|---|
| Scope | Block-Scope { ... } |
Block-Scope { ... } |
Function-Scope |
| Reassignment | ❌ Verboten (TypeError) | ✅ Erlaubt | ✅ Erlaubt |
| Redeklaration | ❌ SyntaxError | ❌ SyntaxError | ⚠️ Stillschweigend erlaubt |
| Hoisting / TDZ | Temporal Dead Zone (ReferenceError) | Temporal Dead Zone (ReferenceError) | Initialisiert mit undefined |
⚠️ 3. Häufige Stolperfallen (Gotchas)
🛑 Stolperfalle 1: "const bedeutet nicht tiefes Einfrieren!"
const schützt lediglich die Variablenzuweisung selbst. Bei Arrays und Objekten können die inneren Eigenschaften weiterhin mutiert werden:
const config = { theme: "dark" };
config.theme = "light"; // ✅ Funktioniert! Objekt-Inhalt mutiert.
config = { theme: "light" }; // ❌ TypeError: Assignment to constant variable!
💡 Stolperfalle 2: Die Temporal Dead Zone (TDZ)
Der Zugriff auf eine let- oder const-Variable vor ihrer Deklarationszeile führt nicht zu undefined, sondern stürzt mit einem ReferenceError ab. Deklariere Variablen daher immer am Anfang des Blocks.