संपादितजावास्क्रिप्ट बंद - क्या कह प्रतिक्रियाओं की संख्या के साथ इन
बीच का अंतर है "आप निजी बातें कर सकते हैं!" नीचे, मैं इसे शीर्ष पर भी जोड़ने जा रहा हूं:
मुझे पता है कि आप बंद होने के भीतर निजी चर का अनुकरण कर सकते हैं। यही वह नहीं है जो मैं पूछ रहा हूं। मैं पूछ रहा हूं, नीचे दिए गए दो उदाहरण दिए गए हैं जहां मैं बंद होने से सब कुछ "निर्यात" कर रहा हूं, इन दो उदाहरणों के बीच मौलिक अंतर क्या है।
वस्तुओं/तरीकों बनाने के इन दोनों तरीकों को देखते हुए:
var test = {}
test = (function(){
var a_method = function(print_me){
return "hello "+print_me;
}
return {print_me: a_method};
})();
test.print_me2 = function(print_me2){
return "hello "+print_me2;
}
test.print_me('world');
>>> returns "hello world"
test.print_me2('world');
>>> returns "hello world"
मैं समझता हूँ कि पहली विधि निजी चर के लिए अनुमति देता है (जो दिल में एक अजगर डेवलपर मैं सच में उपयोग करने के लिए परवाह नहीं है के रूप में), लेकिन दोनों मेरे लिए समान समतुल्य प्रतीत होते हैं, केवल पहला "कूलर" दिखता है (जैसा कि सभी बड़े जावास्क्रिप्ट में लोग ऐसा करते हैं) और दूसरी तरफ बहुत पास लग रहा है;
तो, जैसा अंतर है?
मैंने यहां क्लोजर प्रश्नों को देखा है - उनमें से अधिकतर आप किस चीज का उपयोग करते हैं या क्यों उपयोग करते हैं; मैं उनकी उपयोगिता को समझता हूं, मैं सिर्फ यह जानना चाहता हूं कि आप दूसरे से पहले क्यों करेंगे और इसके क्या फायदे हैं।
मैं अनुमान पर सख्त सबूत पसंद करूंगा - "यह अच्छा नहीं है कि" शांत बच्चे इसे कैसे कर रहे हैं "या" मैंने सुना है कि जब आप बंद करने का उपयोग करते हैं तो मोज़िला बेहतर स्मृति उपयोग करता है ", बल्कि गुणात्मक सबूत दूसरे की तुलना में 'बेहतर' होने की ओर।
जो पहले से कहीं अधिक बेहतर उत्तर है। और हाँ, मैं समझता हूं कि ऑब्जेक्ट को ऑब्जेक्ट की प्रॉपर्टी सेट करने के बजाए तुरंत निष्पादित फ़ंक्शन का परिणाम होने के लिए सेट कर रहा हूं - मान लीजिए कि मैं सिर्फ 'print_me' बनाने की कोशिश कर रहा हूं जो कि एकमात्र संपत्ति होगी परीक्षण वस्तु। सीधे कार्य के रूप में इसे बंद करने के बजाय इसे बंद करने का क्या फायदा होगा? – tkone
@ टकोन: इसे बंद करने में इसका लाभ यह है कि आपके पास बंद है। आप स्थानीय चर बना सकते हैं, ताकि आप वैश्विक नामस्थान को प्रदूषित न करें। हालांकि, यदि आप लाइब्रेरी कोड या प्लगइन लिख रहे हैं तो वैश्विक नामस्थान से सावधान रहना एक मुद्दा है। उदाहरण के लिए बड़ी लाइब्रेरी jQuery केवल वैश्विक नामस्थान में दो नाम जोड़ती है। – Guffa
ठीक है शांत। यही वही है जो मैं समझने की कोशिश कर रहा था। मुझे पता है कि वैश्विक नामस्थान में नामों का एक टन जोड़ना एक बुरा विचार है (इसलिए नेमस्पेसिंग का उपयोग करना), लेकिन सिर्फ यह जानना चाहता था कि लोग बंद कर रहे हैं क्योंकि वे "गर्म" हैं या अगर उन्होंने उपरोक्त मामले में उपयोगिता की सेवा की है। – tkone