यदि आप एक सरलीकृत संस्करण लेते हैं तो यह अधिक समझदार हो सकता है। पहला तैयार कार्य सतर्क करने से कहीं ज्यादा नहीं कर रहा है। अन्य दो दिलचस्प हैं।
कार्यों में गुंजाइश है, जिसका अर्थ है कि जब आप एक चर के अंदर एक चर का उपयोग करते हैं, तो यह पदानुक्रम में तब तक बढ़ जाएगा जब तक यह पाया नहीं जाता है।
आपके दूसरे तैयार फ़ंक्शन में, $
Hi!
तक जाएगा क्योंकि यदि आप फ़ंक्शन के अंदर शुरू होते हैं तो कोई अन्य $
नहीं है।
हालांकि, तीसरे तैयार ब्लॉक में, $
Hi!
पर नहीं जाएगा क्योंकि इसकी परिभाषा करीब है - एक तर्क (function($) {
) के रूप में पारित किया गया है। यह $
jQuery फ़ंक्शन होगा (यानी उस फ़ंक्शन $ == jQuery
) क्योंकि इस तरह jQuery की तैयार सुविधा लागू की गई है।
तो:
var $ = 'Hi!';
jQuery(function() {
alert('$ = ' + $); // in this scope, $ will refer to the 'Hi!'
});
jQuery(function($) { // the $ here will 'shadow' the $ defined as 'Hi!'
alert('$ = ' + $); // in this scope, $ will refer to jQuery
});
अब आपका प्रश्न अन्य पुस्तकालयों के साथ संघर्ष के बारे में है। अन्य पुस्तकालय (उदाहरण के लिए प्रोटोटाइप) $
प्रतीक का भी उपयोग करते हैं क्योंकि यह पुस्तकालय को कॉल करने के लिए एक सुविधाजनक शॉर्टकट है। यदि आप प्रदान किए गए अंतिम तैयार फ़ंक्शन का उपयोग करते हैं, तो आप सुनिश्चित कर सकते हैं कि उस फ़ंक्शन के अंदर, $
jQuery को jQuery के रूप में संदर्भित करेगा क्योंकि jQuery उस कार्य (स्वयं के पहले तर्क के रूप में) को पास करता है।
दूसरे तैयार फ़ंक्शन में, $
प्रोटोटाइप पर भी सेट हो सकता है, उदाहरण के लिए, और आप सुनिश्चित नहीं हैं कि आप $
के साथ jQuery को कॉल कर रहे हैं या नहीं। आपके उदाहरण में, यह Hi!
था और jQuery नहीं। यदि यह प्रोटोटाइप है तो यह वही बात है। पर विचार करें:
// Prototype is loaded here, $ is referring to Prototype
jQuery(function() {
$('selector').addClass('something'); // Oops - you're calling Prototype with $!
});
दूसरी ओर:
// Prototype is loaded here, $ is referring to Prototype
jQuery(function($) { // this $ is shadowing Prototype's $, this $ is jQuery
$('selector').addClass('something'); // Yay - you're calling jQuery with $
});
@ Beefyhalo - क्या '$' विशेष अर्थ पर लेता है यदि यह पहले से ही 'jQuery()' हैंडलर में है? , कहने के लिए है कि तर्क 'jQuery के भीतर पारित करता है (समारोह (तर्क) {...})' अभी भी (प्रभावी रूप से) एक ही बात करने के लिए '' $ के रूप में हल? – dopatraman
jQuery एक jQuery हैंडलर में पहले तर्क के लिए खुद को असाइन करेगा। जो भी तर्क पहली बार है, jQuery इसे सौंपा जाएगा। तो 'jQuery के लिए (फ़ंक्शन (तर्क) {... ',' jQuery (फ़ंक्शन ($) {... ', और' jQuery (फ़ंक्शन (कुछ अन्य आर्टमेंट) {... ', सभी इस अर्थ में समतुल्य हैं कि' तर्क === $ === कुछ अन्यथा ' – beefyhalo
@ Beefyhalo - धन्यवाद, इससे चीजों को साफ़ करने में मदद मिली – dopatraman