In dem Underscore.js Bibliothek des gesamten Code innen gewickelt ist:Wie sind Javascript-Bibliotheken verfügbar, wenn sie in einen IIFE eingebunden sind? Ist der Ausführungskontext nicht entsorgt?
(function() {
//rest of library etc.
}.call(this));
die Funktion Ich verstehe Einwickeln() in() ist für Namespace-Zwecke, und dass die .call (this) ruft die Bibliothek beim Start Gang das Fensterobjekt.
Aber mein Verständnis ist, dass, sobald ein Ausführungskontext beendet ist, es 'gelöscht' wird. Wie steht also der gesamte Code in dieser Bibliothek anderen Skriptdateien zur Verfügung?
Frage beantwortet wurde, aber es hat diese Frage in meinem Kopf gebracht:
Das jetzt macht Sinn für mich. Die Funktion wird ausgeführt und hängt ihre Bibliothek an das Fensterobjekt an. Wenn Sie diesen Ansatz verwenden, können sich Bibliotheken jedoch gegenseitig überschreiben, wenn sie den gleichen Objektnamen an das Fensterobjekt anhängen.
Wäre es nicht besser, wie etwas zu tun:
var library1 = function(
var func1 = function(){
};
return {
func1: func1
})(this);
Es modifiziert den globalen Zustand, z.B. 'window.myNamespace = {Zeug}'. Das "Stuff" wird aufgrund der lexikalischen Schließung immer noch Zugriff auf den Ausführungskontext des IIFE haben (auch wenn es nichts anderes tut). –