🌐 Detecting your location…

So beheben Sie nicht abgefangene ReferenceError-Variablen, die in JavaScript nicht definiert sind

⏱️5 min read  ·  1,083 words

Der FehlerNicht erfasster Referenzfehler: x ist nicht definiert in JavaScript bedeutet, dass Sie versuchen, eine Variable oder Funktion zu verwenden, die im aktuellen Bereich nicht vorhanden ist. Es handelt sich um einen der häufigsten JavaScript-Fehler. Hier finden Sie alle Ursachen und Lösungen.

Was dieser Fehler bedeutet

JavaScript suchte nach einer Variablen oder Funktion namensx konnte es aber im zugänglichen Bereich nicht finden. Entweder wurde es nie deklariert, es liegt außerhalb des Gültigkeitsbereichs, es liegt ein Tippfehler vor oder das Skript, das es definiert, wurde noch nicht geladen. Der Fehler benennt den spezifischen Bezeichner, den er nicht finden konnte – beginnen Sie dort.

Ursache 1: Variable nie deklariert

// 🐛 Using a variable that was never declared
console.log(username);   // ReferenceError: username is not defined

// ✅ Declare it first
const username = 'Alice';
console.log(username);   // works

Ursache 2: Tippfehler im Variablennamen

// 🐛 Declared as 'userName' but used as 'username'
const userName = 'Alice';
console.log(username);   // ReferenceError - case mismatch!

// ✅ Match the exact name (JavaScript is case-sensitive)
const userName = 'Alice';
console.log(userName);   // works

// Common typos: case differences, misspellings, wrong variable

Ursache 3: Außerhalb des Gültigkeitsbereichs

// 🐛 Variable declared in a different scope
function setup() {
  const config = { debug: true };
}
console.log(config);   // ReferenceError - config is inside setup()

// ✅ Declare it in an accessible scope, or return it
function setup() {
  return { debug: true };
}
const config = setup();
console.log(config);   // works

// 🐛 Block scope with let/const
if (true) {
  let temp = 5;
}
console.log(temp);   // ReferenceError - temp only exists in the block

// ✅ Declare in the outer scope if you need it there
let temp;
if (true) { temp = 5; }
console.log(temp);   // works

Ursache 4: Skriptladereihenfolge (Browser)

<!-- 🐛 Using a function before its script loads -->
<script>
  myFunction();   // ReferenceError if library.js hasn't loaded yet
</script>
<script src="library.js"></script>

<!-- ✅ Load the dependency FIRST -->
<script src="library.js"></script>
<script>
  myFunction();   // now library.js is loaded
</script>

<!-- ✅ Or use defer to control load order -->
<script src="library.js" defer></script>
<script src="main.js" defer></script>
<!-- deferred scripts run in order, after HTML parses -->

Ursache 5: Zugriff vor der Deklaration (zeitliche Totzone)

// 🐛 let/const can't be used before their declaration
console.log(count);   // ReferenceError (temporal dead zone)
let count = 5;

// ✅ Declare before using
let count = 5;
console.log(count);   // works

// Note: var is hoisted (returns undefined, not an error),
// but let/const throw a ReferenceError if accessed before declaration

Ursache 6: Fehlender Import (Module)

// 🐛 Using something from another module without importing it
console.log(helper());   // ReferenceError: helper is not defined

// ✅ Import it
import { helper } from './utils.js';
console.log(helper());   // works

Ursache 7: Variable in einem anderen Datei-/Modulbereich

// 🐛 In ES modules, top-level variables are module-scoped, not global
// file1.js
const apiKey = 'secret';

// file2.js
console.log(apiKey);   // ReferenceError - not shared between modules

// ✅ Export and import it
// file1.js
export const apiKey = 'secret';
// file2.js
import { apiKey } from './file1.js';

Debugging-Schritte

  1. Lesen Sie den Fehler – Es benennt den genauen Bezeichner, der nicht definiert ist
  2. Auf Tippfehler prüfen — Groß-/Kleinschreibung und Rechtschreibung (häufigste Ursache)
  3. Stellen Sie sicher, dass es alsdeklariert ist — Gibt es dafür eine const/let/var/function/import?
  4. Überprüfen Sie den Geltungsbereich – Ist die Variable dort zugänglich, wo Sie sie verwenden?
  5. Lade-/Deklarationsreihenfolge prüfen – wird es verwendet, bevor es definiert oder geladen wird?
  6. Importe prüfen – Wird es in Modulen von dort importiert, wo es definiert ist?

Häufig gestellte Fragen

F: Was ist der Unterschied zwischen „nicht definiert“ und „undefiniert“?
A: „x ist nicht definiert“ (ReferenceError) bedeutet, dass die Variable überhaupt nicht im Gültigkeitsbereich vorhanden ist. „undefiniert“ bedeutet, dass die Variable existiert, ihr aber kein Wert zugewiesen ist. Verschiedene Probleme: „nicht definiert“ bedeutet, es zu deklarieren oder den Umfang/Tippfehler zu beheben; „undefiniert“ bedeutet, ihm einen Wert zuzuweisen.

F: Warum funktioniert es manchmal, bei anderen jedoch nicht?
A: Häufig ist die Ladereihenfolge oder das Timing von Skripten zu beachten – eine Variable/Funktion aus einem anderen Skript ist möglicherweise noch nicht geladen, wenn Ihr Code ausgeführt wird. Verwenden Siedefer Stellen Sie bei Skripten sicher, dass Abhängigkeiten zuerst geladen werden, oder warten Sie auf das DOM/Ladeereignis. Zeitweilige Referenzfehler bedeuten normalerweise ein Zeit-/Reihenfolgeproblem.

F: Ich habe die Variable deklariert, erhalte aber immer noch die Meldung „nicht definiert“. Warum?
A: Überprüfen Sie den Gültigkeitsbereich (ist er in einem zugänglichen Bereich deklariert, nicht innerhalb einer Funktion oder eines Blocks, in dem Sie sich außerhalb befinden?), prüfen Sie ihn auf Tippfehler (Groß-/Kleinschreibung beachten) und überprüfen Sie in Modulen, ob Sie ihn importiert haben. Stellen Sie außerdem sicher, dass Sie nicht vor der Deklarationszeile auf let/const zugreifen (zeitliche tote Zone).

F: Wie behebe ich „nicht definiert“ für eine Bibliotheksfunktion?
A: Stellen Sie sicher, dass das Skript der Bibliothek geladen wird, BEVOR Ihr Code es verwendet. Setzen Sie das<script>der Bibliothek Tag zuerst, oder verwenden Siedefer auf beiden Skripten (sie werden der Reihe nach ausgeführt). Für Module importieren Sie die Funktion. Die Bibliothek muss verfügbar sein, bevor Sie sie aufrufen.

F: Warum werfen let und const, var jedoch nicht?
A: var wird angehoben und auf undefiniert initialisiert, sodass ein Zugriff vor der Deklaration undefiniert zurückgibt (kein Fehler). let undconst werden angehoben, aber nicht initialisiert – der Zugriff auf sie vor ihrer Deklarationszeile löst einen ReferenceError (die „zeitliche tote Zone“) aus. Deklarieren Sie let/const, bevor Sie sie verwenden.

Fazit

„Uncaught ReferenceError: x ist nicht definiert“ bedeutet, dass JavaScript eine Variable oder Funktion im zugänglichen Bereich nicht finden kann. Die Ursachen:Die Variable wurde nie deklariert, es liegt ein Tippfehler vor (Groß- und Kleinschreibung prüfen), sie liegt außerhalb des Gültigkeitsbereichs, ein Skript wurde noch nicht geladen, auf sie wurde vor ihrer let/const-Deklaration zugegriffen oder ein Modulimport fehlt. Der Debugging-Ansatz: Lesen Sie den Fehler (er benennt den Bezeichner), suchen Sie zuerst nach Tippfehlern (die häufigste Ursache), überprüfen Sie, ob er deklariert ist und im Gültigkeitsbereich liegt, überprüfen Sie die Lade-/Deklarationsreihenfolge und bestätigen Sie Importe in Modulen. Sobald Sie sicherstellen, dass der Bezeichner deklariert, richtig geschrieben und gültig ist und beim Zugriff verfügbar ist, wird der Fehler behoben. Es handelt sich fast immer um einen Tippfehler, ein Problem mit dem Bereich oder der Ladereihenfolge – gehen Sie diese systematisch durch.

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা