2011-03-10 16 views
5

संभव डुप्लिकेट:जावास्क्रिप्ट नोटेशन: (फ़ंक्शन() {...})();

प्रारंभ JavaScript फ़ाइल की:

(function() { 
// All functions go here. 
// Can someone say what the wrapping nameless function is used for? 
})(); 

What is the purpose of wrapping whole Javascript files in anonymous functions like “(function(){ … })()”?

हैलो सभी,

मैं इस अंकन का उपयोग कई JavaScript फ़ाइलों को देखा है 012,

इसके अलावा प्रोटोटाइप पुस्तकालय के साथ, यह संभव लगता है:

function $() { 
// Prototype $-wrapping function. 
} 

किसी उपरोक्त दो कोड के टुकड़े, उनके उपयोग और अपने मतभेदों को समझाने कृपया कर सकते हैं? कुछ कीवर्ड जो मुझे इस नोटेशन/तकनीक (इसका नाम कैसे दिया जाता है) के बारे में अधिक जानकारी प्राप्त करने में मदद करेंगे, इसलिए मैं भी Google खोज चला सकता हूं ... :)

धन्यवाद!

+1

http://stackoverflow.com/questions/2421911 – Gumbo

+0

का संभावित डुप्लिकेट निश्चित रूप से उपर्युक्त का डुप्लिकेट है, और मुझे लगता है कि नीचे दिए गए किसी भी की तुलना में एक बेहतर बेहतर स्पष्टीकरण। – necromancer

+0

उसमें भी दिलचस्प जानकारी है, धन्यवाद गम्बो। मैं उस दूसरे धागे में जवाब भी पढ़ूंगा! मैंने इसे पोस्ट करने से पहले एक खोज चलाई, लेकिन मुझे बिल्कुल यकीन नहीं था कि समान प्रश्न खोजने के लिए कीवर्ड के रूप में क्या उपयोग करना है। :) – Sander

उत्तर

6

आपके पहले उदाहरण में, लोग वैश्विक नामस्थान अव्यवस्था से बचने के लिए, कारणों को स्कॉइंग कारणों के लिए एक अज्ञात फ़ंक्शन में अपने कोड को घेरते हैं। अजीब कोष्ठक वाक्यविन्यास का उपयोग फ़ंक्शन को परिभाषित करने और निष्पादित करने के लिए किया जाता है; अंत में () का अर्थ का अर्थ है फ़ंक्शन स्वयं ही निष्पादित करता है।

तो उस अज्ञात फ़ंक्शन के अंदर आप function apple(){} को परिभाषित कर सकते हैं और यह केवल उस अज्ञात फ़ंक्शन के अंदर पहुंच योग्य होगा। यह अच्छा है अगर आप लाइब्रेरी बना रहे हैं और केवल कुछ चीजों को अपने वैश्विक नेमस्पेस को अव्यवस्थित करना चाहते हैं।

आपका दूसरा उदाहरण $ नामक एक साधारण कार्य है। कई पुस्तकालय इस नाम का उपयोग करना पसंद करते हैं क्योंकि यह छोटा और संक्षिप्त है, और जब भी आप इसे पुस्तकालयों नामस्थान, छोटे, बेहतर संदर्भित करना चाहते हैं, तब से इसे टाइप करने की आवश्यकता होती है।

3

मैं "जावास्क्रिप्ट रैपिंग समारोह" के लिए खोज की है और पहली हिट this था, जो कहते हैं:

This method doesn't add any new symbols to the global or LIB spaces. 

मैं प्रश्न के दूसरे भाग समझ में नहीं आता: function $() { ... } एक "बेनाम" कार्य नहीं है : इसका नाम $ है! यदि आपको $ नामक फ़ंक्शंस पसंद हैं तो यह ऐसी चीज बनाने का सबसे सरल तरीका है।

+0

ने देखा कि यह वास्तव में एक नामहीन कार्य नहीं है, मेरा बुरा :) मेरे प्रश्न में संपादित किया गया। – Sander

3

एक annonymous समारोह

function() { 
} 

परिभाषित किया गया है और फिर तुरंत

() 

बुलाया अतिरिक्त() फ़ंक्शन enclosing अभिव्यक्ति के रूप में समारोह के इलाज के लिए दुभाषिया के लिए मजबूर किया जा सके। जावास्क्रिप्ट फ़ंक्शन कीवर्ड से शुरू होने वाले किसी भी कथन का उल्लंघन के रूप में व्यवहार करता है, इसलिए इसे अन्यथा तुरंत नहीं कहा जा सकता है।

उद्देश्य वैश्विक नामस्थान प्रदूषण से बचने का उद्देश्य है। फ़ंक्शन में परिभाषित सभी चर फ़ंक्शन के लिए स्थानीय होंगे।

मॉड्यूल पैटर्न के लिए Google।

1

पहले एक तत्काल समारोह कहा जाता है। आप इस फ़ंक्शन पैटर्न here के बारे में अधिक पढ़ सकते हैं।

संबंधित मुद्दे