2011-08-18 30 views
8

मेरे पास जक्री इन एक्शन बुक है, और यह अन्य पुस्तकालयों के साथ संघर्ष को हटाने के बारे में बात करते समय इन तीन कार्यों का उल्लेख करता है। हालांकि, मुझे नहीं पता कि उनके बीच क्या अंतर है और पुस्तक की व्याख्या को समझ में नहीं आता है।इन कार्यों के बीच क्या अंतर है?

jQuery(function($) { 
    alert('I"m ready!'); 
}); 

var $ = 'Hi!'; 
jQuery(function() { 
    alert('$ = ' + $); 
}); 

var $ = 'Hi!'; 
jQuery(function($) { 
    alert('$ = ' + $); 
}); 

क्या किसी को पता है कि अंतर क्या है? धन्यवाद।

उत्तर

2

यदि आप एक सरलीकृत संस्करण लेते हैं तो यह अधिक समझदार हो सकता है। पहला तैयार कार्य सतर्क करने से कहीं ज्यादा नहीं कर रहा है। अन्य दो दिलचस्प हैं।

कार्यों में गुंजाइश है, जिसका अर्थ है कि जब आप एक चर के अंदर एक चर का उपयोग करते हैं, तो यह पदानुक्रम में तब तक बढ़ जाएगा जब तक यह पाया नहीं जाता है।

आपके दूसरे तैयार फ़ंक्शन में, $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 $ 
}); 
1

जब आप लिखते हैं jQuery(function ($) { ... $ बस jQuery वस्तु के लिए एक उपनाम है। आप वास्तव में $ के बजाय किसी भी कानूनी पहचानकर्ता का उपयोग कर सकते हैं, और यह अभी भी jQuery ऑब्जेक्ट के लिए उपनाम होगा।

दूसरे उदाहरण में, अलर्ट '$ = हाय!' कहेंगे। क्योंकि उस मामले में $ फ़ंक्शन के ऊपर घोषित var को इंगित कर रहा है।

तीसरा उदाहरण प्रभावी रूप से फ़ंक्शन के ऊपर घोषित $ मुखौटा करता है क्योंकि $ फ़ंक्शन के अंदर jQuery ऑब्जेक्ट को हल करेगा।

मुझे उम्मीद है कि यह आपको समझ में आता है।

+0

@ Beefyhalo - क्या '$' विशेष अर्थ पर लेता है यदि यह पहले से ही 'jQuery()' हैंडलर में है? , कहने के लिए है कि तर्क 'jQuery के भीतर पारित करता है (समारोह (तर्क) {...})' अभी भी (प्रभावी रूप से) एक ही बात करने के लिए '' $ के रूप में हल? – dopatraman

+2

jQuery एक jQuery हैंडलर में पहले तर्क के लिए खुद को असाइन करेगा। जो भी तर्क पहली बार है, jQuery इसे सौंपा जाएगा। तो 'jQuery के लिए (फ़ंक्शन (तर्क) {... ',' jQuery (फ़ंक्शन ($) {... ', और' jQuery (फ़ंक्शन (कुछ अन्य आर्टमेंट) {... ', सभी इस अर्थ में समतुल्य हैं कि' तर्क === $ === कुछ अन्यथा ' – beefyhalo

+0

@ Beefyhalo - धन्यवाद, इससे चीजों को साफ़ करने में मदद मिली – dopatraman

1

पहला कोड ब्लॉक एक तैयार हैंडलर घोषित करता है जिसे डीओएम परेशानी पूरी तरह से लोड होने के बाद निष्पादित किया जाता है। यह केवल एक चेतावनी बॉक्स पैदा करता है।

jQuery(function($) { 
    alert('I"m ready!'); 
}); 

दूसरा कोड ब्लॉक भी एक तैयार हैंडलर वाणी है, लेकिन यह एक संघर्ष का प्रदर्शन कर रहा है। $ चर को जानबूझकर एक स्ट्रिंग पर सेट किया गया है (यह एक विरोधाभासी जेएस लाइब्रेरी से हो सकता है) और इसलिए jQuery ऑब्जेक्ट के रूप में उपयोग नहीं किया जा सकता है। हैंडलर फ़ंक्शन के दायरे में, $ स्ट्रिंग को असाइन किया गया है और इसलिए अलर्ट $ = Hi! प्रदर्शित करता है।

var $ = 'Hi!'; 
jQuery(function() { 
    alert('$ = ' + $); 
}); 

तीसरे कोड ब्लॉक भी एक तैयार हैंडलर वाणी है, लेकिन यह एक स्थानीय $ पैरामीटर की घोषणा की। jQuery वस्तु पहले पैरामीटर के रूप और इतने भीतर समारोह गुंजाइश तैयार हैंडलर में ही गुजरता है, $ jQuery वस्तु और चेतावनी को संदर्भित करता है $ = ..., जहां ... jQuery वस्तु का प्रतिनिधित्व है प्रिंट होगा।

var $ = 'Hi!'; 
jQuery(function($) { 
    alert('$ = ' + $); 
}); 
संबंधित मुद्दे