Ich habe die JavaScript-Referenz im Mozilla Developer Network durchgesehen und bin auf etwas gestoßen, das so genannt wird "strict mode"
. Ich habe es durchgelesen und habe Probleme zu verstehen, was es tut. Kann jemand (allgemein) kurz erklären, was sein Zweck ist und wie er nützlich ist?
javascript
strict-mode
nkcmr
quelle
quelle
Antworten:
Sein Hauptzweck ist es, mehr zu überprüfen.
Fügen Sie einfach
"use strict";
oben in Ihren Code ein, bevor Sie etwas anderes tun.Zum Beispiel
blah = 33;
ist gültiges JavaScript. Dies bedeutet, dass Sie eine vollständig globale Variable erstellenblah
.Im strengen Modus ist dies jedoch ein Fehler, da Sie das Schlüsselwort "var" nicht zum Deklarieren der Variablen verwendet haben.
Meistens wollen Sie keine globalen Variablen in der Mitte eines beliebigen Bereichs erstellen. In den meisten
blah = 33
Fällen handelt es sich also um einen Fehler, und der Programmierer wollte nicht, dass es sich um eine globale Variable handelt schreibenvar blah = 33
.In ähnlicher Weise sind viele Dinge, die technisch gültig sind, nicht zulässig.
NaN = "lol"
erzeugt keinen Fehler. Es ändert auch nicht den Wert von NaN. Die Verwendung von strict this (und ähnlichen seltsamen Aussagen) führt zu Fehlern. Die meisten Leute wissen das zu schätzen, weil es keinen Grund gibt, jemals zu schreibenNaN = "lol"
, also gab es höchstwahrscheinlich einen Tippfehler.Weitere Informationen finden Sie auf der MDN-Seite zum strengen Modus
quelle
Ein Aspekt des strengen Modus, der in Simons Antwort nicht bereits erwähnt wurde, ist, dass der strenge Modus
this
aufundefined
Funktionen gesetzt ist, die durch Funktionsaufruf aufgerufen werden.Also solche Dinge
verursacht beim Aufrufen einen Fehler
privateMethod
(da Sie keine Eigenschaft hinzufügen könnenundefined
), anstattb
dem globalen Objekt sinnlos eine Eigenschaft hinzuzufügen .quelle
privateMethod.bind(this)();
new
jsbin.com
Der strikte Modus wurde hinzugefügt, damit es eine leicht statisch analysierbare Teilmenge von EcmaScript gibt, die ein gutes Ziel für zukünftige Versionen der Sprache ist. Der strikte Modus wurde auch in der Hoffnung entwickelt, dass Entwickler, die sich auf den strengen Modus beschränken, weniger Fehler machen und sich die Fehler, die sie machen, auf offensichtlichere Weise manifestieren.
Harmony , die hoffentlich die nächste Hauptversion von EcmaScript sein wird, wird auf ES5 strict aufbauen.
Einige andere Sprachexperimente hängen ebenfalls vom strengen Modus ab. SES hängt von der Analysierbarkeit des ES5-Strict-Modus ab.
Anhang C der Norm erläutert die Unterschiede zwischen dem strengen Modus und dem normalen Modus.
quelle
Aufrufen des Strict-Modus im Code
Der strikte Modus gilt für ganze Skripte oder für einzelne Funktionen. Es gilt nicht für Blockanweisungen in {} Klammern. Der Versuch, sie auf solche Kontexte anzuwenden, führt zu nichts.
Gesamtes Skript:
Angenommen, wir erstellen app.js, sodass durch Hinzufügen eines Skripts zur Verwendung der ersten Anweisung der strikte Modus für den gesamten Code erzwungen wird.
Strenger Funktionsmodus:
Um den strengen Modus für eine Funktion aufzurufen, geben Sie die genaue Anweisung "use strict" ein. am Anfang des Funktionskörpers vor jeder anderen Anweisung.
Der strikte Modus enthält mehrere Änderungen an der normalen Javascript-Semantik. Im ersten strengen Modus werden einige stille JavaScript-Fehler beseitigt, indem sie geändert werden, um Fehler auszulösen.
Zum Beispiel: Code im strengen Modus
Im obigen Codebeispiel ohne Verwendung des strengen Modus im Code wird kein Fehler ausgegeben. Da wir auf Variablen zugreifen,
x
ohne sie zu deklarieren. Wenn Sie also im strengen Modus auf nicht deklarierte Variablen zugreifen, wird ein Fehler ausgegeben.Versuchen wir nun, auf die Variable x zuzugreifen, ohne sie ohne strengen Modus zu deklarieren.
Vorteil der Verwendung des strengen Modus:
quelle
Im strengen Modus werden mehrere Änderungen an der normalen JavaScript-Semantik vorgenommen.
Der strikte Modus eliminiert einige stille JavaScript-Fehler, indem sie geändert werden, um Fehler auszulösen.
Der strikte Modus behebt Fehler, die es JavaScript-Engines erschweren, Optimierungen durchzuführen.
Der strikte Modus verbietet eine Syntax, die wahrscheinlich in zukünftigen Versionen von ECMAScript definiert wird.
quelle
ECMAScript5
führt einige neue Objekte und Eigenschaften sowie die sogenannten"strict mode"
.Der strikte Modus ist eine Teilmenge der Sprache, die veraltete Funktionen ausschließt. Der strikte Modus ist opt-in und nicht erforderlich. Wenn Sie also möchten, dass Ihr Code im strengen Modus ausgeführt wird, erklären Sie Ihre Absicht mit (einmal pro Funktion oder einmal für das gesamte Programm) der folgenden Zeichenfolge:
quelle
2017 und ich habe endlich die Dokumentation gefunden:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
quelle
Frage: Das
folgende Problem ist aufgetreten. Ich habe ein Tutorial befolgt und versucht, die folgende
scss
Datei zu kompilieren und daraus CSS-Code zu generieren.mit folgender
gulpfile.js
Aufgabe:Der Fehler, den ich bekomme, lautet also wie folgt:
Lösung:
Es zeigt mir also eine
index.js
Datei, die sich in meinem gulp-sass-Modul befindet (die grundsätzlich gesperrt ist und nicht bearbeitet werden sollte). Aber wenn ich energisch gehe und"use_strict"
das oben drauf hinzufügeindex.js
Datei einfüge, läuft meine Aufgabe reibungslos.Ich war hilflos und benutze dies weiterhin als Lösung! Aber nachdem ich einige andere SO Q & A's durchgesehen hatte, sah ich folgende Antwort wie folgt:
und früher habe ich meine NodeJs (auf Version 10.x) aktualisiert und dann Gulp neu erstellt, indem ich die folgenden Befehle ausgeführt habe, wie es mir das Terminal angewiesen hat:
Und es ist alles in Ordnung. So wurde es gelöst. Ich habe die Änderungen, für die ich sie vorgenommen habe, rückgängig gemacht
index.js
gulp-Moduldatei vorgenommen . Und jetzt läuft es reibungslos.Hoffe, diese Antwort wird jemandem da draußen hilfreich sein!
quelle