आपके द्वारा दिखाए जाने वाले विशेष मामले में, कार्यक्षमता या दृश्यता के मामले में कोई सार्थक अंतर नहीं है।
यह संभावना है कि मूल कोडर ने इस दृष्टिकोण को एक प्रकार के टेम्पलेट के रूप में अपनाया, जिससे वह उन निजी चर को परिभाषित कर सके, जिनका उपयोग चीजों की परिभाषा में किया जा सकता है myFunction:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
यह seconds_per_dayहर बार फ़ंक्शन की गणना करने से बचता है, जबकि इसे वैश्विक दायरे को प्रदूषित करने से भी बचाता है ।
हालाँकि, वहाँ कुछ भी अनिवार्य रूप से अलग नहीं है और सिर्फ कह रहा है
var MyObject = function() {
var seconds_per_day = 24 * 60 * 60;
return {
myFunction: function(foo) {
return seconds_per_day;
}
};
}();
मूल कोडर ने ऑब्जेक्ट के सिंटैक्टिव / सिंटैक्स का उपयोग करके ऑब्जेक्ट में फ़ंक्शन जोड़ने में सक्षम होना पसंद किया है root.myFunction = function, बजाय ऑब्जेक्ट के सिंटैक्स /myFunction: function । लेकिन यह अंतर मुख्य रूप से प्राथमिकता का विषय है।
हालाँकि, मूल कोडर द्वारा ली गई संरचना का यह लाभ है कि गुण / विधियाँ आसानी से कोड में कहीं और जोड़ी जा सकती हैं:
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);
नीचे पंक्ति, अगर आपको ज़रूरत नहीं है, तो इस दृष्टिकोण को अपनाने की कोई आवश्यकता नहीं है, लेकिन इसे बदलने की भी कोई आवश्यकता नहीं है, क्योंकि यह पूरी तरह से अच्छी तरह से काम करता है और वास्तव में इसके कुछ फायदे हैं।