2011-11-29 12 views
14

मैं किसी और के जावा स्क्रिप्ट कोड और कोड के बहुमत डिबगिंग हूँ इस तरह लपेटा जाता है:

(function ($) { 
    //majority of code here... 
})(jQuery); 

क्या ($) और (jQuery) साथ चल रहा है? मुझे इस तरह कोड करने के लिए सिखाया नहीं गया था और उन्हें नहीं देखा है। उनका उद्देश्य क्या है?

साथ ही, document.ready नहीं है, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि कोड को (); द्वारा अंत में पढ़ने के ठीक बाद निष्पादित किया गया है?

+0

कि कोड document.ready – longbkit

+5

@longbkit पर निष्पादित किया जाएगा। – RightSaidFred

+4

@ लोंगबकिट, नहीं, इसका मतलब यह नहीं है। कृपया जाओ और बंद करने के बारे में पढ़ें .. या, नरक, जावास्क्रिप्ट सीखना शुरू करें। –

उत्तर

16
var $ = "some value we don't care about"; 

// v=====normal plain old function 
(function ($) { 
//  ^=======receives jQuery object as the $ parameter 

    //majority of code here, where $ === jQuery... 

    $('.myclass').do().crazy().things(); 


})(jQuery); 
// ^=======immediately invoked, and passed the jQuery object 


// out here, $ is undisturbed 
alert($); // "some value we don't care about" 
+3

ठीक है, तो मूल रूप से पूरे ऐसा करने का बिंदु ताकि आप उस समारोह के अंदर $() अंकन के साथ jQuery कॉल कर सकते हैं, और कहा कि समारोह के बाहर अगर प्रोटोटाइप की तरह कुछ और $() संकेतन का उपयोग करता है यह कोई बात नहीं है? .. तो सच में यह सिर्फ जब कोई विवाद का उपयोग कर jQuery() (या कुछ अन्य अंकन) हर बार लिखने के लिए होने से बचाता है .. बनाता है भावना – tsdexter

+2

अनिवार्य रूप से सब कुछ, कि यहाँ कोड का 'बहुमत में है ...' सा, पृथक है शेष कोड से। यह अलग-अलग दायरे में मौजूद है। यदि आप वहां 'var something = 1' बनाते हैं, तो यह वैश्विक' विंडो 'दायरे पर समाप्त नहीं होता है। इस संरचना के बाहर का कोड अंदर की किसी भी चीज को ओवरराइट नहीं कर सकता है। –

+1

@tsdexter: हाँ, आपको यह मिल गया है। वैश्विक 'jQuery' स्थानीय' '$ है, जो वैश्विक' '$ (यदि हो तो) अन्य प्रयोजनों के लिए इस्तेमाल किया जा सकता है इसका मतलब द्वारा संदर्भित है।जावास्क्रिप्ट में, एक चर के साथ चरणीय दायरा बनाया गया है। – RightSaidFred

13

यह है जब आप/जरूरत jQuery.noConflict() उपयोग करना चाहते हैं के लिए उपयोगी है, और वैश्विक नाम $ jQuery के लिए उपनाम नहीं है। कोड आप पोस्ट आप छोटे $ का उपयोग jQuery केवल अनाम समारोह के अंदर मतलब करने के लिए, $ एक वैश्विक होने की जरूरत के बिना कर सकते हैं।

+0

धन्यवाद, हालांकि राइटसाइडफ्रेड ने आपको हरा दिया। बहुत सराहना की। 'JQuery.noConflict' का उल्लेख करने के लिए – tsdexter

+0

+1 जो jQuery को वैश्विक '$' छोड़ देता है। – RightSaidFred

0

इस संरचना को JQuery प्लगइन कहा जाता है, प्लगइन का उद्देश्य आपकी परियोजना में किसी भी सामान्य कार्य/फ़ंक्शन का ढांचा बनाना है, वैसे ही आप अपने प्लगइन को अलग-अलग पृष्ठ या उसी पृष्ठ में अपने उपयोग के अनुसार बढ़ा सकते हैं। इस तरह आप हर जगह एक ही कोड दोहराने से बच सकते हैं।

यह बाहर की जाँच http://docs.jquery.com/Plugins/Authoring

+0

वह संरचना केवल एक jQuery निर्माण नहीं है। और जब प्लगइन बनाते समय इसका उपयोग किया जा सकता है, तो इसे होने की आवश्यकता नहीं है। jQuery प्लगइन्स 'jQuery.prototype' को विस्तारित करके बनाए जाते हैं। – RightSaidFred

3

बस RightSaidFred's जवाब पर विस्तार करने के लिए एक छोटे से, जब मैं पहली बार ()() वाक्य रचना मैं थोड़ा befuddled था देखा था, लेकिन यह समझ में बनाया एक बार मैंने महसूस किया कोष्ठक एक गुमनाम परिभाषित करने के लिए इस्तेमाल किया जा रहा कार्य करें और फिर इसे कॉल करें। उदाहरण:

(function (msg){alert(msg)})('hello'); 

... एक फ़ंक्शन को परिभाषित करता है और फिर इसे पैरामीटर के रूप में 'हैलो' पास करने के बाद कॉल करता है।

तो सवाल में उदाहरण:

(function ($) { 
    //majority of code here... 
})(jQuery); 

समारोह, की गारंटी है कि $ कुछ और में हस्तक्षेप किए बिना jQuery के लिए काम करेगा का एक तरीका भीतर $ के रूप में एक गुमनाम समारोह में jQuery गुजर और इसे करने के लिए बात कर रहा है । नहीं, कि डोम तैयार कोड नहीं है:

+1

किसी कारण से, यह स्पष्टीकरण मेरे साथ थोड़ा बेहतर क्लिक किया :) धन्यवाद! – JoshP

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