2012-03-08 14 views
6

मैंने हाल ही में अज्ञात कार्यों को स्वयं कॉल करने के बारे में सीखा है। कोड के कुछ स्निपेट जो मैंने पूरे किए थे, $ (दस्तावेज़) के साथ स्वयं कॉलिंग फ़ंक्शन का उपयोग किया। पहले से ही। यह दोनों का उपयोग करने के लिए अनावश्यक, या व्यर्थ लगता है।

वहाँ एक मामले में जहां आप उपयोग करेंगे

(function(){ 
    $(document).ready(); 
})(); 

बनाम

$(document).ready(function(){ 
    (function(){})(); 
}); 

मैं समझ है कि आप या तो चाहते हैं स्क्रिप्ट अभी या डोम लोड के बाद क्रियान्वित किया जाना है। मैं नहीं देख सकता कि आप दोनों एक साथ क्यों उपयोग करेंगे।

धन्यवाद।

+4

FYI करें - वे बराबर नहीं कर रहे हैं। – Hamish

उत्तर

11

पहले उदाहरण के लिए निश्चित रूप से उपयोग का मामला है। यदि आपके पास एक ही पृष्ठ पर लोड की गई अन्य जेएस लाइब्रेरी/स्क्रिप्ट हैं, तो इस बात की कोई गारंटी नहीं है कि वे $ चर को ओवरराइट नहीं कर रहे हैं। (यह बहुत आम है जब आपके पास एक ही पृष्ठ पर प्रोटोटाइप और jQuery है)।

तो यदि प्रोटोटाइप $ का उपयोग कर रहा है, तो आपको किसी भी समय jQuery के साथ काम करना चाहते हैं, तो आपको jQuery का उपयोग करना होगा। यह काफी बदसूरत प्राप्त कर सकते हैं:

jQuery(function(){ 
    jQuery('a', '#content').bind('click', function(){ 
     if(jQuery(this).attr('href') == 'www.google.com') 
     { 
      alert("This link goes to Google"); 
      jQuery(this).addClass('clicked')); 
     } 
    }); 
}) 

, ध्यान रखें कि हम $ उपयोग नहीं कर सकते क्योंकि है कि वैश्विक दायरे में प्रोटोटाइप से एक विधि है।

लेकिन अगर आप इसे इस के अंदर लिपटे ..

(function($){ 
    $(function(){ 

     // your code here 

    }); 
})(jQuery); 

$ jQuery पुस्तकालय के अंदर संदर्भ वास्तव में हैं अभी भी बाहर की दुनिया में प्रोटोटाइप की चर्चा करते हुए, जबकि!यह आपके कोड को साफ़ रखने में मदद कर सकते हैं:

(function($){ 
    $(function{}(
     jQuery('a', '#content').bind('click', function(){ 
      if(jQuery(this).attr('href') == 'www.google.com') 
      { 
       alert("This link goes to Google"); 
       jQuery(this).addClass('clicked')); 
      } 
     }); 
    )); 
})(jQuery); 

यह jQuery एक्सटेंशन के साथ एक आम पैटर्न सुनिश्चित करने के लिए कि वे हमेशा jQuery वस्तु से जुड़ जाते हैं, लेकिन $ का उपयोग कर कोड सुथरा रखने के लिए लिखा जा सकता है।

+0

क्या आप $ .noConflict() फ़ंक्शन से अवगत हैं? यह निर्भरता को $ पर हटा देता है। उदाहरण के लिए var j = $ .noConflict(); इंगित करता है कि परिवर्तनीय जे अब $ 3 के बराबर है ("# ElementId"); मान्य होगा। प्रलेखन: http://api.jquery.com/jquery.noconflict/ लिंक मौरिस के लिए –

2

आप दोनों एक साथ उपयोग नहीं करना चाहते हैं, क्या आप ऐसा कुछ कर रहे हैं जिसके लिए आपको आवश्यकता है?

.ready() प्रक्रिया आम तौर पर एक गुमनाम समारोह के साथ प्रयोग किया जाता है:

$ (document) .ready (

jQuery API दस्तावेज़ यहाँ में, http://api.jquery.com/ready/, तो आप इन उदाहरण देख सकते हैं फ़ंक्शन() {
// हैंडलर .ready() कहा जाता है।

});

कौन बुला के बराबर है:

$ (function() {।
// .ready() कहा जाता है के लिए हैंडलर

});

लेकिन मुझे यकीन नहीं है कि यह आपके प्रश्न का उत्तर देता है क्योंकि मुझे नहीं लगता कि आप वास्तव में कहां से पूछते हैं। उम्मीद है कि यह वही मदद करता है!

1

एकमात्र कारण आप एक और बंद करने को पेश होगा/लोड करने के लिए एक और गुंजाइश सीमा लागू करने के लिए इस तरह के $ के रूप में वैश्विक वस्तुओं की रक्षा है।

उदाहरण के लिए:

$(document).ready(function(){ 

    // Do upper scope things. 

    (function(){ 

     // Do lower scope things. 

    })(); 

}); 

आप के आधार पर आप हाल ही में इस चीज मुझे लगता है के बारे में सीखने की है बताता है कि आपको अपेक्षाकृत जावास्क्रिप्ट के लिए नए हैं।

मैं एक साथ एक ब्लॉग पोस्ट को कुछ बुनियादी अवधारणाओं समझा मदद कर सकता है डाल दिया है समारोह क्षेत्र सहित जावास्क्रिप्ट के क्षेत्र में नये, की दृष्टि के रूप में। http://bit.ly/tLkykX

+0

धन्यवाद। अच्छा पढ़ा। अगर मैं कर सकता तो मैं तुम्हारा और कॉलिन का सही निशान चिन्हित करूंगा। – VtoCorleone

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