2011-02-13 11 views
43

मैं जावास्क्रिप्ट बंद समझते हैं, और मैं इस देशी जे एस में किया देखा है:

(function() { 
    // all JS code here 
})(); 

लेकिन, jQuery मसाला कर जोड़ने करता है?

(function ($) { 
    // all JS code here 
})(jQuery); 
+0

इस मामले में $ कुछ भी हो सकता है यह इस फ़ंक्शन के अंदर jquery ऑब्जेक्ट बन जाएगा, $ function (y) {}) (jQuery); –

उत्तर

30

यह एक तरह से $ करने के लिए मानचित्रण jQuery का एक तरीका तो यह है कि सभी नहीं एक पेज में कोड इसे देखेगा।

हो सकता है कि आपके पास एक मौजूदा स्क्रिप्ट है जो jQuery का उपयोग करती है जिसे आप पुन: उपयोग करना चाहते हैं लेकिन आप प्रोटोटाइप का भी उपयोग करते हैं जो उसी पृष्ठ में $ का उपयोग करता है।

उस निर्माण में किसी भी jQuery का उपयोग करके कोड को लपेटकर आप पृष्ठ में दूसरे कोड के साथ संघर्ष में आने के बिना निहित भाग के लिए $ jQuery को फिर से परिभाषित करते हैं।

+0

आह, ठीक है। अच्छा धन्यवाद। – ma11hew28

+6

इसे – zzzzBov

+1

के रूप में जाना जाता है नोट करें कि आप आईआईएफई फ़ंक्शन स्कोप के बाहर परिवर्तनीय उत्थान को रोकने में मूल्यवान, 'jQuery' से '' 'तक नहीं, इस तरह से किसी भी तर्क को मैप कर सकते हैं। –

47

जब आप देखते हैं:

(function() { 
    // all JS code here 
})(); 

यह है स्व-प्रेरक गुमनाम समारोह के रूप में जानता है। फ़ंक्शन निष्पादित हो जाता है जैसे ही इसे () के अंत में पार्स किया जाता है (इस प्रकार आप जेएस फ़ंक्शन चलाते हैं)।

सूचना है कि अतिरिक्त बाहरी ब्रेसिज़ सिर्फ सम्मेलन कर रहे हैं, आप भी इसे लिख सकते हैं:

function() { 
    // all JS code here 
}(); 

लेकिन उस सम्मेलन भारी चारों ओर प्रयोग किया जाता है और आप इसे करने के लिए छड़ी चाहिए।

(function($) { 
    // all JS code here 
})(jQuery); 

यहाँ, $ ताकि आप$ बजाय jQuery कीवर्ड का इस्तेमाल कर सकते हैं jQuery वस्तु को मैप किया है। तुम भी बहुत कुछ अन्य चरित्र डाल सकता है:

(function(j) { 
    // all JS code here 
})(jQuery); 

यहाँ, jjQuery वस्तु के बजाय मैप किया गया है।

ध्यान दें कि स्व-चालान समारोह में निर्दिष्ट तर्क उस कार्य के दायरे में रहते हैं और बाहरी दायरे/चर के साथ संघर्ष नहीं करते हैं।


मैं इस विषय पर एक लेख लिखा था, कृपया इसे चेक आउट:

+0

लेकिन, डिफ़ॉल्ट रूप से 'jQuery' के लिए' '' 'उपनाम नहीं है? – ma11hew28

+0

@MattDiPasquale: मैंने अपने उत्तर में यही कहा है, यह '(फ़ंक्शन ($) { // सभी जेएस कोड } के साथ उपनाम बना दिया गया है) (jQuery); '............... – Sarfraz

+0

फायरबग कंसोल इस तरह विस्तृत त्रुटि संदेश नहीं देता है। मुझे बस "प्रेमी परिभाषित नहीं किया जा रहा है।" – ma11hew28

11

इस तरह से बंद करने में jQuery को पास करने के दो कारण हैं।

अब तक सबसे महत्वपूर्ण बात यह है कि यह आपके कोड को उन पृष्ठों पर काम करता है जो jQuery's "no conflict" mode का उपयोग करते हैं, जो अन्य पुस्तकालयों के साथ jQuery के उपयोग की अनुमति देता है जो $ वैश्विक पर नियंत्रण चाहते हैं। इस कारण से, (function($) { ... })(jQuery) तकनीक दृढ़ता से jQuery प्लगइन्स लिखते समय अनुशंसित है।

द्वितीयक कारण यह है कि यह $ स्वत: निष्पादन समारोह के दायरे में एक स्थानीय चर बनाता है और स्थानीय परिवर्तनीय पहुंच वैश्विक चर पहुंच से (मामूली) तेज है। निजी तौर पर, मैं इसे एक बहुत ही आकर्षक कारण नहीं मानता - मैं एक ऐसे परिदृश्य की कल्पना नहीं कर सकता जिसमें डीओएम विधियों की बजाय jQuery का उपयोग करने का उपर स्वीकार्य होगा, लेकिन वैश्विक चर के रूप में jQuery तक पहुंचने का यह नहीं होगा। :-)

मैं कहना चाहता हूँ कि सबसे अच्छा कारण इस तकनीक का प्रयोग करने के लिए जब नहीं एक प्लगइन लेखन स्थिरता के लिए है - आप कम यह करने के लिए भूल जाते हैं होने की संभावना हो, जब यह महत्वपूर्ण है कि आप कर रहे हैं ऐसा करने की आदत में जब यह नहीं है। इसके अलावा, आप कभी नहीं जानते कि आपको कोड रीसायकल करने का अवसर कब मिलेगा!

17
(function() { 
    // all JS code here 
})(); 

एक तुरंत-लागू समारोह अभिव्यक्ति (IIFE), उच्चारण "iffy" है। कुछ लोग उन्हें "अज्ञात, आत्म-निष्पादन कार्य" या केवल "स्वयं निष्पादन कार्यों" कहते हैं।

(function(aParameter) { 
    alert(aParameter); // will alert "an argument" 
})("an argument"); 

यहाँ एक Iife जो पैरामीटर 'aParameter' लेता है और अपने आप में तर्क "एक तर्क" गुजरता है।

(function($){ 
    alert($(window).jquery); // alert the version of jQuery 
})(jQuery); 

यह एक समान है, लेकिन "jQuery" (jQuery वस्तु दृष्टान्त) Iife लिए तर्क है, और इस मामले में, jQuery '$' पैरामीटर के रूप में पारित कर दिया जाता है। इस तरह, बस '$' टाइप करके, आईआईएफई के शरीर के पास jQuery और उसके सदस्यों तक पहुंच है। यह एक आम jQuery सम्मेलन है, और इस तरह से इस सम्मेलन को बनाए रखने के लिए jQuery प्लगइन्स लिखने वाले लोगों के लिए यह आम बात है।

न केवल उपरोक्त कोड jQuery सम्मेलन को बनाए रखता है, यह भी सुनिश्चित करता है कि न तो आप और न ही कोई और गलती से उस सम्मेलन को तोड़ सकता है। जैसे, निम्नलिखित कोड ले:

var $ = function() { 
    alert('foo'); 
} 

इस कोड को कुछ जो निश्चित रूप से jQuery नहीं है में '$' बदल जाता है। अगर किसी ने आपके प्लगइन कोड के बाहर किसी अन्य कोड में ऐसा किया है, और फिर आपने अपनी प्लगइन में jQuery को '$' के रूप में स्पष्ट रूप से पास नहीं किया है, तो आप आमतौर पर jQuery के रूप में '$' का उपयोग करने में सक्षम नहीं होंगे।

+1

आईआईएफई स्वयं निष्पादन कार्यों के लिए अधिक सामान्य स्थानीय भाषा है। –

+1

@ जोशएच महान सुझाव। अपडेट किया गया। +1 - धन्यवाद! –