मान लीजिए मैं:प्रश्न() के
<script src="script1.js"></script>
<script src="script2.js"></script>
इन लिपियों के
दोनों के अंदर ready()
है। क्या स्क्रिप्ट 2.जेएस के ready()
में कोड हमेशा पहले के बाद निष्पादित होगा?
मान लीजिए मैं:प्रश्न() के
<script src="script1.js"></script>
<script src="script2.js"></script>
इन लिपियों के
दोनों के अंदर ready()
है। क्या स्क्रिप्ट 2.जेएस के ready()
में कोड हमेशा पहले के बाद निष्पादित होगा?
हां।
सबसे पहले, script2.js
में कोड, script1.js
के बाद मार डाला जाएगा के रूप में यह दस्तावेज़ में बाद में आता है (और defer
attribute सेट नहीं है)।
इसके अलावा, ready
समारोह के the implementation [source] है:
ready: function(fn) {
// Attach the listeners
jQuery.bindReady();
// Add the callback
readyList.done(fn);
return this;
},
जहां readyList
seems to be [source] एक deferred object [docs]। इसका मतलब है कि कॉलबैक को उस ऑब्जेक्ट में जोड़ा गया क्रम में निष्पादित किया जाता है।
एकाधिक दस्तावेज तैयार किए जाने के लिए निकाल दिए जाएंगे।
.ready()
कार्यों पहले पंजीकृत पहले मिल संसाधित आधार पर कहा जाता है
मैं इसके लिए कुछ स्रोत एट्रिब्यूशन देखना चाहता हूं ... क्योंकि मुझे लगता है कि यह for..in लूप के साथ किया गया है, जिसका अर्थ यह है कि यह संग्रह पर इटरेटर का उपयोग करता है, जिसे आप ऑर्डर का उपयोग नहीं कर सकते हैं। – jcolebrand
jQuery इसके लिए अपने Deferred
ऑब्जेक्ट का उपयोग करता है। jQuery के उपयुक्त कोड साबित करता है कि यह क्रम में निष्पादित किया जाता है:
जब आप .ready
फोन समारोह readyList
में जोड़ा जाता है:
readyList.done(fn);
जब डोम तैयार है, इस समारोह निष्पादित होने
:readyList.resolveWith(document, [ jQuery ]);
resolveWith
समारोह इस कोड को जो कार्यों कॉलबैक के रूप में जोड़ा कार्यान्वित होता है
जैसा कि आप देख सकते हैं, कॉलबैक फ़ंक्शंस shift
एड (कॉलबैक सरणी (यानी, readyList
) की शुरुआत से पॉप आउट हो गया है, इसलिए पहले को दूसरे से पहले निष्पादित किया जाता है।
अच्छा स्पष्टीकरण के लिए धन्यवाद। :) –
जानकारी के लिए धन्यवाद, upvoting – babonk
अच्छी नौकरी फेलिक्स। मैं बस असम्पीडित कोड के उस हिस्से को देख रहा था कि इसे समझाने के तरीके को समझने की कोशिश कर रहा हूं ... –
महान उत्तर – babonk