Lädt...

Der Strict Mode

Der Strict Mode weist ein paar Fehler ab, die früher still durchliefen. "use strict" steht ganz oben. Danach legt size = "regular" ohne let und ohne const keinen globalen Namen an: es fliegt ein ReferenceError. In der Zeile dieser Seite steht ReferenceError.

Zwei andere Seiten bleiben außen vor

Die Aufgabenliste endete bei done: buy tea. Die Fehlerseite hat absichtlich new Error("missing size") geworfen, und catch las diese Meldung. Hier wirfst du kein eigenes Error. Die Engine wirft, weil size nie deklariert wurde. console.error wirft weiterhin nicht.

Nur ganz vorn zählt es

"use strict" gilt allein als erste Anweisung des Skripts oder als erste Anweisung in genau einer Funktion. Ein späterer String ändert nichts. Eine Funktion darf streng sein, während der Rest es nicht ist. Module sind schon streng, die Anweisung dort ist überflüssig.

Was setSize tut

setSize schreibt size, ohne es zu deklarieren. Der Aufruf steht in try. Ein globales size entsteht nicht.

Zuweisung ohne Deklaration

javascript
"use strict";
function setSize() {
size = "regular";
}
try {
setSize();
} catch (error) {
console.log(error.name);
}

Im Log steht ReferenceError. Die Reparatur heißt let size = "regular". Ist drink tea und size so deklariert, kann label tea / regular zurückgeben. order.size zu schreiben ist die andere Reparatur, die stimmt, denn dieser Name existiert.

Name gegen Methode

Ein Aufruf über den Funktionsnamen setzt this nicht. Im Strict Mode ist this dann undefined. Der Methodenaufruf auf order setzt this auf dieses Objekt, also ist this.drink tea.

this bei einem bare-Aufruf

javascript
"use strict";
function bare() {
return this;
}
const order = {
drink: "tea",
label() {
return this.drink;
}
};
console.log(bare());
console.log(order.label());

Die Logs sind undefined, danach tea. Lies this.drink nicht innen in bare. Dort gibt es kein Objekt, und diese Lesart wirft.

Vier Unterschiede

Links steht das alte stille Verhalten. Rechts steht, was die Anweisung daraus macht.

📊 Was die Anweisung ändert

Altes stilles Verhalten Mit "use strict"
size = "regular" ohne Deklaration erzeugt einen globalen Namen ReferenceError
this in bare ist das globale Objekt undefined
Doppelter Parameter, der letzte gewinnt SyntaxError
delete auf einer deklarierten Variable gibt false zurück SyntaxError

Ein doppelter Parameter oder delete size scheitert schon beim Lesen, als SyntaxError. try fängt das nicht. Der ReferenceError der Zuweisung entsteht erst, wenn die Funktion läuft, und catch sieht ihn. delete order.drink bleibt in beiden Modi erlaubt, solange sich die Eigenschaft entfernen lässt.

Die Seite selbst

Die Seite ist ein einziges strenges Skript. Die Zuweisung scheitert, und der Name des Fehlers wird auf die Seite geschrieben.

Seite mit ReferenceError

html
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
"use strict";
const line = document.querySelector("#line");
try {
size = "regular";
} catch (error) {
line.textContent = error.name;
}
</script>
</body>
</html>

Die Zeile lautet ReferenceError. Nicht done: buy tea. Nicht caught / missing size. Setze let vor size, dann läuft dieser catch nicht mehr.

Fünf kurze Schritte

  1. setSize unter "use strict" laufen lassen. Das Log ist ReferenceError.
  2. Die Zuweisung zu let size = "regular" ändern. Der Wurf ist weg.
  3. bare() aufrufen. Der Wert ist undefined.
  4. order.label() aufrufen. Der Wert ist tea.
  5. Die Seite lesen. Die Zeile ist ReferenceError.

Echte Fehltritte

  • Die Anweisung hinter eine andere Anweisung setzen
  • Von einer undeklarierten Zuweisung einen globalen Namen erwarten
  • this.drink innen in einem bare-Aufruf lesen
  • Einen doppelten Parameter mit try fangen
  • Die Zeile als done: buy tea lesen
  • Die Zeile als caught / missing size lesen

Merk dir das

  • Die Anweisung zuerst
  • Undeklariertes size = "regular" wirft ReferenceError
  • this bei bare ist undefined, und order.label() gibt tea zurück
  • Doppelte Parameter und delete auf einer Variable sind SyntaxError
  • Die Zeile der Seite ist ReferenceError

🧠 Testen Sie Ihr Wissen

Bereit zum Start

Testen Sie Ihr Wissen

Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen

❓
6
Fragen
🎯
70%
Zum Bestehen
♾️
∞
Zeit
🔄
∞
Versuche

📝 Anweisungen

  • Lesen Sie jede Frage sorgfältig
  • Wählen Sie die beste Antwort für jede Frage
  • Sie können das Quiz so oft wiederholen, wie Sie möchten
  • Ihr Fortschritt wird oben angezeigt