In dem von Ihnen gezeigten speziellen Fall gibt es keinen bedeutenden Unterschied in Bezug auf Funktionalität oder Sichtbarkeit.
Es ist wahrscheinlich, dass der ursprüngliche Codierer diesen Ansatz als eine Art Vorlage verwendet hat, mit der er private Variablen definieren kann, die bei der Definition von Dingen wie myFunction
:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60; // <-- private variable
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
Dies vermeidet die Berechnung bei seconds_per_day
jedem Aufruf der Funktion und verhindert gleichzeitig, dass der globale Bereich verschmutzt wird.
Es gibt jedoch nichts wesentlich anderes als nur zu sagen
var MyObject = function() {
var seconds_per_day = 24 * 60 * 60;
return {
myFunction: function(foo) {
return seconds_per_day;
}
};
}();
Der ursprüngliche Codierer hat es möglicherweise vorgezogen, Funktionen zum Objekt mit der deklarativen Syntax von root.myFunction = function
und nicht mit der Objekt- / Eigenschaftssyntax von hinzufügen zu können myFunction: function
. Dieser Unterschied ist jedoch hauptsächlich eine Frage der Präferenz.
Die vom ursprünglichen Codierer verwendete Struktur hat jedoch den Vorteil, dass Eigenschaften / Methoden leicht an anderer Stelle im Code hinzugefügt werden können:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
(function(root) {
var another_private_variable = Math.pi;
root.myFunction2 = function(bar) { };
})(MyObject);
Unterm Strich müssen Sie diesen Ansatz nicht anwenden, wenn Sie ihn nicht benötigen, aber Sie müssen ihn auch nicht ändern, da er einwandfrei funktioniert und tatsächlich einige Vorteile bietet.