मैं THREE.js का अध्ययन कर रहा हूं और एक ऐसा पैटर्न देखा है जहां फ़ंक्शन को इस तरह परिभाषित किया जाता है:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(उदाहरण देखें यहां रेकास्ट विधि )।
इस तरह की विधि की सामान्य भिन्नता इस तरह दिखाई देगी:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
पहले संस्करण की तुलना सामान्य भिन्नता से की जाती है, पहला ऐसा लगता है:
- यह एक स्व-निष्पादित फ़ंक्शन का परिणाम प्रदान करता है।
- यह इस फ़ंक्शन के भीतर एक स्थानीय चर को परिभाषित करता है।
- यह तर्क युक्त वास्तविक फ़ंक्शन को लौटाता है जो स्थानीय चर का उपयोग करता है।
इसलिए मुख्य अंतर यह है कि पहले बदलाव में बार को केवल एक बार सौंपा जाता है, आरंभीकरण पर, जबकि दूसरा भिन्नता इस अस्थायी चर को हर बार बनाता है जब इसे कहा जाता है।
यह क्यों उपयोग किया जाता है, इस पर मेरा सबसे अच्छा अनुमान यह है कि यह बार के लिए उदाहरणों की संख्या को सीमित करता है (केवल एक ही होगा) और इस प्रकार मेमोरी मैनेजमेंट हेडहेड को बचाता है।
मेरे सवाल:
- क्या यह धारणा सही है?
- क्या इस पैटर्न का कोई नाम है?
- इसका उपयोग क्यों किया जाता है?