Strict-Modus gilt für den Ausführungskontext, in dem sie deklariert ist und alle Kontexte, die den Kontext enthält (mit etwas squidginess erstellt um Kontexte über eval
, aber vermeiden eval
verwenden und die squidginess vermeiden), so in der Regel würden Sie verwenden das Modul Muster es auf alle Ihre Code anwenden:
(function() {
"use strict";
function foo() {
}
function bar() {
}
// ...presumably code hooking up `foo` and `bar` to events
// or otherwise using them -- or of course, you could export
// them from the scope...
})();
im obigen Strict-Modus gilt nicht nur für die anonyme Funktion, sondern foo
und bar
auch. So zum Beispiel, wo dieser Code würde "Arbeit" (eine globale Variable über The Horror of Implicit Globals erstellen):
(function() {
function foo() {
someNameThatIsntDefined = 42; // Blech, creates implicit global
}
foo();
})();
... diesen Code schlägt mit einer ReferenceError
(der einzigen Änderung ist die "use strict"
):
(function() {
"use strict";
function foo() {
someNameThatIsntDefined = 42; // Throws ReferenceError
}
foo();
})();
... weil eine der vielen nützlichen Dinge, die Strict-Modus ist der Schrecken der impliziten Globals nicht loswerden.
Hier ist ein weiteres Beispiel, wo wir eine Funktion exportieren, die im strikten Modus läuft, auch wenn aus nicht-strengen Code genannt:
var MyModule;
MyModule = MyModule || {};
(function(mod) {
"use strict";
mod.doSomethingUseful = doSomethingUseful;
function doSomethingUseful() {
// ...
}
})(MyModule);
„Loose“ Code MyModule.doSomethingUseful
nennen kann, die immer im Strict-Modus läuft. Das Ergebnis ist, dass Sie strengen Modus auf Ihre Code anwenden können, ohne dass jeder mit Ihren Code auch verwenden. Sehr praktisch, dass.
Danke für die Bearbeitung, Matt! Ich mache das (string statt strict) viel ... :-) –