modalità Strict si applica al contesto di esecuzione in cui viene dichiarata e tutti i contesti tale contesto contiene (con qualche squidginess intorno contesti creati tramite eval
, ma evitare di usare eval
e si evita la squidginess), quindi di solito devi usare il modello di modulo da applicare a tutti il codice:
(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...
})();
In, modalità rigorosa sopra vale non solo per la funzione anonima, ma per foo
e bar
pure. Così, per esempio, dove il codice sarebbe "lavoro" (creare una variabile globale tramite The Horror of Implicit Globals):
(function() {
function foo() {
someNameThatIsntDefined = 42; // Blech, creates implicit global
}
foo();
})();
... questo codice fallisce con un ReferenceError
(l'unico cambiamento è il "use strict"
):
... perché una delle tante cose utili che la modalità rigorosa fa è eliminare l'orrore delle global implicite.
Ecco un altro esempio, dove esportiamo una funzione che viene eseguito in modalità rigorosa anche quando chiamato da codice non-strict:
var MyModule;
MyModule = MyModule || {};
(function(mod) {
"use strict";
mod.doSomethingUseful = doSomethingUseful;
function doSomethingUseful() {
// ...
}
})(MyModule);
codice "Loose" può chiamare MyModule.doSomethingUseful
, che corre sempre in modalità rigorosa. Il risultato è che puoi applicare la modalità rigorosa a il tuo codice senza richiedere a tutti il numero di utilizzare il codice. Molto utile, quello.
fonte
2012-07-02 12:23:57
Grazie per la modifica, Matt! Lo faccio molto (stringa anziché strict) ... :-) –