EMZETT.
Login

ReferenceError (JavaScript)

Kurz: JavaScript kennt den verwendeten Namen nicht, weil er nicht deklariert, falsch geschrieben oder außerhalb seines Gültigkeitsbereichs benutzt wird.

Genauer: Typische Meldungen: ReferenceError: x is not defined und ReferenceError: Cannot access 'x' before initialization. Es geht um Variablen und Gültigkeitsbereiche (Scope).

Im Detail

Mögliche Ursachen

  • Tippfehler im Namen (anzahl statt anzhal).
  • Variable wurde nie mit let, const oder var deklariert.
  • Gültigkeitsbereich: Eine mit let/const in einem Block deklarierte Variable existiert außerhalb nicht.
  • Temporal Dead Zone: let/const werden vor ihrer Deklaration verwendet (Cannot access 'x' before initialization).
  • Im Browser genutzte Objekte (window, document) gibt es in Node.js nicht, und umgekehrt (require, process).
  • Ein Skript wird vor dem Skript geladen, das den Namen definiert, oder ein Import fehlt.

Beispiel

if (true) {
  let summe = 5;
}
console.log(summe);   // ReferenceError: summe is not defined
 
console.log(a);       // ReferenceError: Cannot access 'a' before initialization
let a = 1;

Lösungswege

  1. Schreibweise und Groß-/Kleinschreibung prüfen.
  2. Variable deklarieren und vor der Verwendung initialisieren.
  3. Außerhalb eines Blocks benötigte Variablen vor dem Block deklarieren.
  4. Umgebung bedenken: Browser-API in Node oder umgekehrt (typeof window !== "undefined").
  5. Reihenfolge der Skripte und Importe prüfen; in Modulen import/export korrekt setzen.
  6. Mit "use strict" bzw. ES-Modulen werden versehentliche globale Variablen früh gemeldet; ein Linter (ESLint, Regel no-undef) findet es schon im Editor.

Siehe auch: Cannot read properties of undefined, TypeError