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.
"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.
"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.
<!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
- setSize unter "use strict" laufen lassen. Das Log ist ReferenceError.
- Die Zuweisung zu let size = "regular" ändern. Der Wurf ist weg.
- bare() aufrufen. Der Wert ist undefined.
- order.label() aufrufen. Der Wert ist tea.
- 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
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 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