„Strenger Modus“ ist eine neue Syntax, die durch ECMA-262 Edition 5 definiert wird, was bedeutet, dass für die Ausführung eine strikte Javascript-Syntax verwendet werden muss. Einige in der Vergangenheit häufig verwendete Schreibmethoden lösten SyntaxError-Ausnahmen aus, wie zum Beispiel:
1. Es gibt keine var-Deklaration vor der Variablen
2. Verwenden Sie oktale Syntax: var n = 023 und var s = "
1. Warum den „strengen Modus“ verwenden
Die Hauptzwecke der Einrichtung des „strengen Modus“ sind folgende:
1. Beseitigen Sie einige unzumutbare und ungenaue Aspekte der Javascript-Syntax.
Beseitigen Sie einige unsichere Aspekte der Codeausführung und sorgen Sie für eine höhere Effizienz des Compilers Laufgeschwindigkeit;
4. Den Weg für neue Versionen von Javascript ebnen.
Andererseits kann derselbe Code im „strikten Modus“ unterschiedliche Ausführungsergebnisse haben; einige Anweisungen, die im „normalen Modus“ ausgeführt werden können, werden im „strikten Modus“ nicht ausgeführt. Wenn Sie diese Inhalte beherrschen, können Sie Javascript besser verstehen und ein besserer Programmierer werden.
In diesem Artikel wird der „strenge Modus“ ausführlich vorgestellt.
2. Deklarieren Sie den „strengen Modus“
Das Deklarieren des „strengen Modus“ ist mit nur einer Anweisung sehr einfach:
Der Code lautet wie folgt: "use strict";
Hinweis: Ältere Versionen von Browsern behandeln es als eine Zeile gewöhnlicher Zeichenfolgen und ignorieren es.
Code kopieren
Der Code lautet wie folgt:
<script></p>"use strict"; <p>console.log("Dies ist der strikte Modus.");</p>
<div class="codetitle"></script>
<script><u>console.log("Dies ist der normale Modus.");</u></script>
Fügen Sie „use strict“ in die erste Zeile des Funktionskörpers ein, und die gesamte Funktion wird im „strict mode“ ausgeführt.
Der Code lautet wie folgt:
function strict(){" use strict“ ;
return „This is strict mode.“;
"use strict";
// etwas Code hier
})();
4. Syntax- und Verhaltensänderungen im „strengen Modus“
Der „strenge Modus“ hat einige Änderungen an der Syntax und dem Verhalten von Javascript vorgenommen.
1. Explizite Deklaration globaler Variablen
Wenn wir im normalen Modus Variablen verwenden, müssen wir sie nicht zuerst mit var deklarieren (explizite Deklaration), aber im strengen Modus müssen Variablen mit var deklariert werden, bevor sie verwendet werden können, andernfalls ist ein Fehler aufgetreten .
2. Statische Bindung
Eine Besonderheit der Javascript-Sprache besteht darin, dass sie eine „dynamische Bindung“ ermöglicht, d. h., zu welchem Objekt bestimmte Eigenschaften und Methoden gehören, wird nicht zur Kompilierzeit, sondern zur Laufzeit bestimmt.
Der strenge Modus erlegt der dynamischen Bindung einige Einschränkungen auf. In einigen Fällen ist nur statische Bindung zulässig. Mit anderen Worten: Zu welchem Objekt die Eigenschaften und Methoden gehören, wird während der Kompilierungsphase bestimmt. Dies trägt dazu bei, die Kompilierungseffizienz zu verbessern, den Code leichter lesbar zu machen und weniger Überraschungen zu verursachen.
Konkret geht es dabei um die folgenden Aspekte.
(1) Es ist verboten, die with-Anweisung
Weil die with-Anweisung zur Kompilierungszeit nicht bestimmen kann, zu welchem Objekt das Attribut gehört.
Im normalen Modus verfügt die Javascript-Sprache über zwei Variablenbereiche: den globalen Bereich und den Funktionsbereich. Der strikte Modus erstellt einen dritten Bereich: den Auswertungsbereich.
Im normalen Modus hängt der Umfang der Auswertungsanweisung davon ab, ob sie sich im globalen Bereich oder im Funktionsbereich befindet. Im strikten Modus ist die eval-Anweisung selbst ein Bereich und kann keine globalen Variablen mehr generieren. Die von ihr generierten Variablen können nur innerhalb von eval verwendet werden.
3. Erweiterte Sicherheitsmaßnahmen
(1) Verbieten Sie, dass dieses Schlüsselwort auf das globale Objekt verweist
"use strict";
this.a = 1;
};
f();// Fehler, das ist undefiniert
(2) Es ist verboten, den Aufrufstapel innerhalb der Funktion zu durchlaufen
"use strict";
f1.caller; // Fehlerberichterstattung
f1.arguments; // Fehlerberichterstattung
}
f1();
4. Das Löschen von Variablen ist verboten
Variablen können im strikten Modus nicht gelöscht werden. Es können nur Objekteigenschaften gelöscht werden, deren konfigurierbare Eigenschaft auf „true“ gesetzt ist.
5. Explizite Fehlerberichterstattung
Im normalen Modus wird beim Zuweisen eines Werts zu einer schreibgeschützten Eigenschaft eines Objekts kein Fehler gemeldet, sondern es schlägt stillschweigend fehl. Im strikten Modus wird ein Fehler gemeldet.
6. Doppelter Namensfehler
Der strikte Modus hat einige neue Syntaxfehler hinzugefügt.
(1) Objekte können keine Attribute mit doppelten Namen haben
Wenn ein Objekt im Normalmodus mehrere Attribute mit demselben Namen hat, überschreibt das zuletzt zugewiesene Attribut den vorherigen Wert. Im strikten Modus handelt es sich um einen Syntaxfehler.
(2) Funktionen dürfen keine Parameter mit doppelten Namen haben
Wenn die Funktion im normalen Modus mehrere Parameter mit demselben Namen hat, können Sie diese mit arguments[i] lesen. Im strikten Modus handelt es sich um einen Syntaxfehler.
7. Oktalschreibweise ist verboten
Wenn im Normalmodus die erste Ziffer einer Ganzzahl 0 ist, bedeutet dies, dass es sich um eine Oktalzahl handelt. Beispielsweise entspricht 0100 der Dezimalzahl 64. Der strikte Modus verbietet diese Darstellung, das erste Bit der Ganzzahl ist 0 und es wird ein Fehler gemeldet.
arguments ist das Parameterobjekt der Funktion und der strikte Modus schränkt seine Verwendung ein.
(1) Zuweisung zu Argumenten ist nicht erlaubt
(2) Argumente verfolgen keine Parameteränderungen mehr
Das bedeutet, dass Sie sich selbst nicht innerhalb einer anonymen Funktion aufrufen können.
9. Funktionen müssen auf der obersten Ebene deklariert werden
Neue Versionen von Javascript werden in Zukunft einen „Block-Level-Bereich“ einführen. Um mit der neuen Version Schritt zu halten, erlaubt der strikte Modus nur die Deklaration von Funktionen im globalen Bereich oder auf der obersten Ebene des Funktionsbereichs. Das heißt, es ist nicht erlaubt, Funktionen innerhalb eines Nicht-Funktionscodeblocks zu deklarieren.
Um in Zukunft auf neue Versionen von Javascript umzusteigen, fügt der strikte Modus einige neue reservierte Wörter hinzu: implementiert, Schnittstelle, let, Paket, privat, geschützt, öffentlich, statisch, Ertrag.
Die Verwendung dieser Wörter als Variablennamen führt zu einem Fehler.