Strict Mode ist eine strengere Variante von JavaScript
JavaScript hat eine lange Geschichte hinter sich – und damit auch jede Menge fragwürdiger Designentscheidungen: Zuweisungen, die stillschweigend globale Variablen anlegen, ein this, das je nach Aufrufart seine Bedeutung wechselt, doppelte Parameternamen, die einfach... funktionierten. An diesen Dingen etwas zu ändern würde das halbe Web zerschießen, deshalb hat TC39 (das Komitee, das die Sprache pflegt) einen anderen Weg gewählt: einen Opt-in-Modus, in dem die scharfen Kanten entschärft werden.
Dieses Opt-in nennt sich Strict Mode. Aktivieren lässt es sich mit einer einzigen Zeile am Anfang einer Datei oder Funktion:
Wenn du das ausführst, bekommst du einen ReferenceError: x is not defined. Ohne die Direktive legt derselbe Code fröhlich eine globale Variable namens x an und gibt 10 aus. Gleiche Sprache, zwei völlig verschiedene Spielregeln.
Die 'use strict' Direktive
Die Direktive ist einfach ein String-Literal — 'use strict'; oder "use strict";. Sie muss die erste Anweisung im Script oder in der Funktion sein. Sobald davor irgendetwas steht, sei es auch nur ein loser Ausdruck, behandelt die Engine sie als ganz normalen String und ignoriert sie.
Du kannst den Strict Mode auch nur auf eine einzelne Funktion beschränken, indem du die Direktive direkt in ihr platzierst. In der Praxis macht das aber niemand mehr — entweder du schreibst Module (die sind ohnehin standardmäßig strict) oder du schaltest gleich die ganze Datei um.
Was der Strict Mode konkret verändert
Strict Mode ist keine einzelne Regel, sondern ein ganzes Paket an Änderungen. Die wichtigsten Punkte:
- Die Zuweisung an eine undeklarierte Variable wirft einen Fehler, statt still eine globale Variable anzulegen.
thisist bei einem normalen Funktionsaufrufundefinedund nicht mehr das globale Objekt.- Doppelte Parameternamen (
function f(a, a) {}) sind ein Syntaxfehler. - Zuweisungen an schreibgeschützte Properties werfen einen Fehler, statt stillschweigend fehlzuschlagen.
- Das Löschen einer normalen Variable oder Funktion wirft einen Fehler.
- Einige für die Zukunft reservierte Wörter (
implements,interface,package,private,protected,public,static,yield) dürfen nicht als Variablennamen verwendet werden.
Ein kleiner Rundgang:
Jeder dieser Fälle läuft nach demselben Muster: „Die Engine hat einen wahrscheinlichen Fehler frühzeitig bemerkt." Genau darin liegt der Mehrwert.
Der stille globale Variablen-Bug
Das ist der Hauptgrund, warum es Strict Mode in JavaScript überhaupt gibt. Ohne 'use strict' wird aus einem Tippfehler schnell mal eine globale Variable:
// Nicht-strikter Modus (mach das nicht)
function setup() {
usernmae = 'Ada'; // Tippfehler – erzeugt window.usernmae
}
setup();
console.log(username); // undefined – die echte Variable wurde nie gesetzt
Das Programm läuft. Kein Fehler. Der Bug taucht erst später auf – wenn irgendetwas, das eigentlich username lesen sollte, plötzlich auf undefined stößt. Im Strict Mode knallt genau dieser Tippfehler sofort beim Ausführen, und du behebst ihn in Sekunden statt in Stunden.
Modernes JavaScript läuft standardmäßig im Strict Mode
Und jetzt kommt der Punkt, über den viele stolpern: Der meiste JavaScript-Code, den du heute schreibst, läuft sowieso schon im Strict Mode – ganz ohne dass du 'use strict' irgendwo hingeschrieben hast.
Zwei große Quellen für diese automatische Strenge:
- ES Module. Jede
.mjs-Datei, jedes<script type="module">und alles, was überimport/exporteingebunden wird, läuft automatisch im Strict Mode. Ohne Direktive, ohne alles. - Klassenrümpfe. Jede Anweisung innerhalb von
class { ... }ist strict – selbst dann, wenn die umgebende Datei es nicht ist.
Wann musst du 'use strict'; also tatsächlich selbst hinschreiben? Nur in klassischen Skripten — also altmodischem JS, das per simplem <script>-Tag geladen wird, oder in älteren Node.js-Dateien, die mit require ohne Modul-Bundling arbeiten. Bei allem, was du neu schreibst, übernehmen Module diese Aufgabe für dich.
Strict Mode verändert this in normalen Funktionen
Ein Verhalten, das besonders erwähnt werden muss, weil es Einsteiger regelmäßig auf dem falschen Fuß erwischt. Im Non-Strict-Mode zeigt this beim Aufruf einer normalen Funktion ohne vorangestelltes Objekt auf das globale Objekt (window im Browser, global in Node). Im Strict Mode ist this dagegen undefined:
Das ist in aller Regel genau das, was man will. Wenn this den Wert undefined hat, fällt ein vergessenes Method-Binding sofort auf. Zeigt es dagegen stillschweigend aufs globale Objekt, versteckt sich der Bug so lange, bis an einer ganz anderen Stelle etwas kaputtgeht.
Was der Strict Mode nicht leistet
Der Strict Mode zieht die Regeln zur Compile- und Laufzeit etwas straffer an — aber er bringt dir weder Typen, noch warnt er vor Null-Zugriffen oder ungenutzten Variablen. Dafür sind TypeScript, ESLint und dein Editor zuständig. Sieh den Strict Mode eher als Korrektiv für ein paar bekannte Fallstricke auf Sprachebene, nicht als komplettes Sicherheitsnetz.
Er ist auch nicht gleichbedeutend mit „modernem JavaScript". Man kann im Strict Mode grauenhaften Code schreiben und ohne die Direktive hervorragenden. Er macht lediglich ein paar konkrete Fehler schwerer zu begehen.
Das Wichtigste auf einen Blick
'use strict';am Anfang einer Datei oder Funktion aktiviert eine strengere Variante von JavaScript.- Tippfehler erzeugen keine globalen Variablen mehr,
thiswird nicht mehr klammheimlich zum globalen Objekt, und einige weitere Fallstricke werfen jetzt Fehler. - ES Modules und
class-Bodies laufen automatisch im Strict Mode — die Direktive musst du dort praktisch nie selbst hinschreiben. - Es geht darum, Bugs früher zu erwischen, nicht darum, neue Features freizuschalten.
Weiter geht's: Kommentare
Du kennst jetzt Direktiven, Semikolons und die Regeln, auf die die Engine Wert legt. Als Nächstes dran: die Notizen, die du für künftige Leser hinterlässt — wie Kommentare in JavaScript funktionieren und wann sie sich wirklich lohnen.
Häufig gestellte Fragen
Was ist der Strict Mode in JavaScript?
Der Strict Mode ist eine optionale Variante von JavaScript, die aus einer Handvoll stillschweigender Fehler echte Fehlermeldungen macht. Aktiviert wird er, indem du den String 'use strict'; ganz an den Anfang einer Datei oder Funktion stellst. Die Sprache wird dadurch strenger: Die Zuweisung an eine nicht deklarierte Variable wirft einen Fehler, doppelte Parameternamen sind verboten, und this in einem normalen Funktionsaufruf ist undefined statt des globalen Objekts.
Wie aktiviere ich den Strict Mode in JavaScript?
Schreib 'use strict'; als allererste Anweisung eines Skripts oder einer Funktion. Davor darf wirklich nichts stehen – nicht mal eine leere Zeile ohne Kommentar –, sonst wird die Zeile nur als gewöhnlicher String behandelt. In modernem Code musst du das ohnehin kaum noch selbst schreiben: ES-Module (also .mjs-Dateien oder <script type="module">) und der Body jeder class laufen automatisch im Strict Mode.
Warum sollte man den Strict Mode in JavaScript nutzen?
Weil er Bugs früher sichtbar macht. Ein Tippfehler wie usernmae = 'Ada' legt ohne Strict Mode klammheimlich eine globale Variable an – mit Strict Mode gibt's einen ReferenceError. Außerdem reserviert der Strict Mode zukünftige Schlüsselwörter, verbietet doppelte Property-Namen in älteren Engines und sorgt dafür, dass sich this vorhersehbar verhält. Alles zusammen macht den Code deutlich leichter nachvollziehbar.
Brauche ich 'use strict' in modernem JavaScript überhaupt noch?
In der Regel nein. ES-Module und class-Bodies sind standardmäßig strict, und die meisten modernen Projekte bestehen aus genau diesen beiden. Explizit 'use strict'; schreiben musst du eigentlich nur noch in klassischen Skripten alter Bauart – also solchen, die per normalem <script>-Tag ohne type="module" eingebunden werden.