$ (दस्तावेज़)। पहले से ही शॉर्टहैंड


245

निम्नलिखित के लिए आशुलिपि है $(document).ready?

(function($){

//some code

})(jQuery);

मैं देख रहा हूं कि यह पैटर्न बहुत इस्तेमाल किया गया है, लेकिन मैं इसका कोई संदर्भ नहीं ढूंढ पा रहा हूं। यदि यह शॉर्टहैंड है $(document).ready(), तो क्या कोई विशेष कारण है जो काम नहीं कर सकता है? मेरे परीक्षणों में तैयार घटना से पहले हमेशा आग लगती है।


उल्लिखित पैटर्न फ़ंक्शन (जैसे var somevar;) के अंदर परिभाषित कोई भी चर फ़ंक्शन के बाहर एक ही नाम के चर की सामग्री को नहीं बदलेगा
टिमो हुओवेनन

3
कोड में यह सुनिश्चित करने का प्रभाव है कि फ़ंक्शन फ़ंक्शन ब्लॉक में $ jQuery का प्रतिनिधित्व करता है इसलिए कोड उन जगहों पर पोर्टेबल है जहां jQuery के लिए $ alias अक्षम या कुछ और के रूप में परिभाषित किया गया है।
AsAAnyway

जवाबों:


253

के लिए आशुलिपि $(document).ready(handler)है $(handler)(जहां handlerएक समारोह है)। देखें यहाँ

आपके प्रश्न के कोड का कोई लेना-देना नहीं है .ready()। बल्कि, यह तर्क के रूप में jQuery ऑब्जेक्ट के साथ एक तुरंत-आमंत्रित फ़ंक्शन अभिव्यक्ति (IIFE) है। इसका उद्देश्य कम से कम $चर के दायरे को अपने स्वयं के ब्लॉक तक सीमित करना है ताकि यह टकराव का कारण न बने। आप आमतौर पर यह सुनिश्चित करने के लिए jQuery प्लगइन्स द्वारा उपयोग किए जाने वाले पैटर्न को देखते हैं $ == jQuery


14
तकनीकी तौर पर यह एक फंक्स्ड फंक्शन एक्सप्रेशन है । यह आत्म-आह्वान कर रहे थे, यह स्वयं को अंदर से बुला रहा होगा। के लिए वेब खोजें iife, या काउबॉय अल्मन के प्रसिद्ध ब्लॉग पोस्ट के आगे छोड़ें । विवरण ... शीश।
2540625

546

आशुलिपि है:

$(function() {
    // Code here
});

24
पहला तर्क है $। इसमें जोड़ना चाह सकते हैं। यह उपयोगी हैjQuery(function($, undefined) {});
रेयोस

5
@raynos इसकी आवश्यकता नहीं है। उपरोक्त कोड ठीक उर्फ ​​के रूप में काम करता है$(document).ready(function(){ });
काइल ट्रुबरमैन

10
यह जानना उपयोगी है कि आपको $पहले तर्क के रूप में मुफ्त में मिलता है।
रेयानोस

3
मैं अभी भी महीने में एक बार इस उत्तर पर जाता हूं।
नग्सन

89

सही आशुलिपि यह है:

$(function() {
    // this behaves as if within document.ready
});

आपके द्वारा पोस्ट किया गया कोड ...

(function($){

//some code

})(jQuery);

... एक अनाम फ़ंक्शन बनाता है और इसे तुरंत jQueryarg के रूप में पारित होने के साथ निष्पादित करता है $। यह सब प्रभावी रूप से फ़ंक्शन के अंदर कोड लेता है और इसे सामान्य की तरह निष्पादित करता है, क्योंकि $पहले से ही इसके लिए एक उपनाम है jQuery। : डी


4
आप कह सकते हैं कि यह यह भी सुनिश्चित करता है कि $ jQuery के लिए उपनाम है, अगर अन्य उपकरण जो कि उपनाम के रूप में $ का भी उपयोग करते हैं
जिम वोल्फ

16

यह एक आशुलिपि नहीं है $(document).ready()

जिस कोड को आपने पोस्ट किया है वह अंदर का कोड है और $वैश्विक नामस्थान को प्रदूषित किए बिना jQuery उपलब्ध कराता है । इसका उपयोग तब किया जा सकता है जब आप एक पृष्ठ पर प्रोटोटाइप और jQuery दोनों का उपयोग करना चाहते हैं।

यहाँ प्रलेखित: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression


प्रश्न का उत्तर देने के लिए धन्यवाद
MarcGuay

12

ये विशिष्ट लाइनें jQuery प्लगइन्स के लिए सामान्य आवरण हैं:

"... यह सुनिश्चित करने के लिए कि आपका प्लगइन अन्य पुस्तकालयों से नहीं टकराता है, जो डॉलर के चिह्न का उपयोग कर सकते हैं, यह jQuery को एक स्व-निष्पादित फ़ंक्शन (बंद करने) के लिए पास करने का सबसे अच्छा अभ्यास है जो इसे डॉलर के संकेत पर मैप करता है ताकि यह हो सके ' इसके निष्पादन के दायरे में किसी अन्य पुस्तकालय द्वारा अधिलेखित नहीं किया जाना चाहिए। "

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );

से http://docs.jquery.com/Plugins/Authoring


11

बहु-ढांचा सुरक्षित आशुलिपि के लिए तैयार है:

jQuery(function($, undefined) {
    // $ is guaranteed to be short for jQuery in this scope
    // undefined is provided because it could have been overwritten elsewhere
});

ऐसा इसलिए है क्योंकि jQuery एकमात्र ऐसा ढांचा नहीं है जो चर $और undefinedचर का उपयोग करता है


यह भी लिखा जा सकता है(function($){ ... })(jQuery);
माइक कॉसर

2
@ माइक कैसर भी एक अच्छा दृष्टिकोण है, लेकिन इसे readyतुरंत नहीं बुलाया जाएगा , इसके बजाय इसे तुरंत कहा जाता है
तिमो हुओवेनन

5

यहां तक ​​कि छोटे संस्करण का उपयोग करना है

$(()=>{

});

जहां $jQuery के लिए खड़ा है और ()=>{}इसे 'एरो फंक्शन' कहा जाता thisहै जो क्लोजर से विरासत में मिला है। (ताकि thisआप के windowबजाय शायद में होगा document।)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.