2011-07-10 18 views
25

मान लीजिए मैं:प्रश्न() के

<script src="script1.js"></script> 
<script src="script2.js"></script> 
इन लिपियों के

दोनों के अंदर ready() है। क्या स्क्रिप्ट 2.जेएस के ready() में कोड हमेशा पहले के बाद निष्पादित होगा?

उत्तर

29

हां।

सबसे पहले, 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; 
}, 

जहां readyListseems to be [source] एक deferred object [docs]। इसका मतलब है कि कॉलबैक को उस ऑब्जेक्ट में जोड़ा गया क्रम में निष्पादित किया जाता है।

+1

अच्छी नौकरी फेलिक्स। मैं बस असम्पीडित कोड के उस हिस्से को देख रहा था कि इसे समझाने के तरीके को समझने की कोशिश कर रहा हूं ... –

+0

महान उत्तर – babonk

2

एकाधिक दस्तावेज तैयार किए जाने के लिए निकाल दिए जाएंगे।

0

.ready() कार्यों पहले पंजीकृत पहले मिल संसाधित आधार पर कहा जाता है

+0

मैं इसके लिए कुछ स्रोत एट्रिब्यूशन देखना चाहता हूं ... क्योंकि मुझे लगता है कि यह for..in लूप के साथ किया गया है, जिसका अर्थ यह है कि यह संग्रह पर इटरेटर का उपयोग करता है, जिसे आप ऑर्डर का उपयोग नहीं कर सकते हैं। – jcolebrand

14

jQuery इसके लिए अपने Deferred ऑब्जेक्ट का उपयोग करता है। jQuery के उपयुक्त कोड साबित करता है कि यह क्रम में निष्पादित किया जाता है:

जब आप .ready फोन समारोह readyList में जोड़ा जाता है:

readyList.done(fn); 

जब डोम तैयार है, इस समारोह निष्पादित होने

:
readyList.resolveWith(document, [ jQuery ]); 

resolveWith समारोह इस कोड को जो कार्यों कॉलबैक के रूप में जोड़ा कार्यान्वित होता है

जैसा कि आप देख सकते हैं, कॉलबैक फ़ंक्शंस shift एड (कॉलबैक सरणी (यानी, readyList) की शुरुआत से पॉप आउट हो गया है, इसलिए पहले को दूसरे से पहले निष्पादित किया जाता है।

+0

अच्छा स्पष्टीकरण के लिए धन्यवाद। :) –

+0

जानकारी के लिए धन्यवाद, upvoting – babonk