varsayalım Ben: Bu komutSoru() 'ın
<script src="script1.js"></script>
<script src="script2.js"></script>
Hem içeride ready()
var. Script2.js'in ready()
'daki kod her zaman ilkinden sonra yürütür mü?
varsayalım Ben: Bu komutSoru() 'ın
<script src="script1.js"></script>
<script src="script2.js"></script>
Hem içeride ready()
var. Script2.js'in ready()
'daki kod her zaman ilkinden sonra yürütür mü?
Evet.
Her şeyden önce, script2.js
kodu script1.js
'dan sonra, daha sonra belgede (ve defer
attribute ayarlanmamıştır) sonra çalıştırılacaktır.
Ayrıca, ready
fonksiyon the implementation [source] olup:
ready: function(fn) {
// Attach the listeners
jQuery.bindReady();
// Add the callback
readyList.done(fn);
return this;
},
burada readyList
seems to be [source] bir deferred object [docs]. Bu, geri çağrıların, o nesneye eklendikleri sırayla yürütüldüğü anlamına gelir.
Birden fazla belge hazır (ları), yanıt vermeleri için işten çıkarılacaktır.
.ready()
fonksiyonlar ilk tescilli olsun ilk işlenen bazda denir
Bunun için bir kaynak atıfını görmek istiyorum ... anladığım kadarıyla, bunun bir for..in döngüsü ile yapıldığı anlamına gelir; bu, kullanarak siparişi veremeyeceğiniz koleksiyon üzerinde yineleyiciyi kullanır. – jcolebrand
jQuery bunun için kendi Deferred
nesnesini kullanır. Eğer .ready
çağırdığınızda
, fonksiyon readyList
eklenir::
readyList.done(fn);
DOM hazır
, bu fonksiyon çalıştırılır: jQuery uygun kod sırayla yürütülür kanıtlıyor :readyList.resolveWith(document, [ jQuery ]);
resolveWith
fonksiyonu geri aramaları gibi katma fonksiyonlarını yerine bu kodu içeren
Gördüğünüz gibi, geri arama işlevleri shift
ed (geri arama dizisinin başlangıcından (yani, readyList
)) dışarı atılır, böylece ilk ikincisinden önce gerçekleştirilir.
Güzel açıklama. :) –
Bilgi için teşekkürler, yükseltme – babonk
Aferin Felix. Sadece nasıl açıklanacağını anlamaya çalışan sıkıştırılmamış kodun bir kısmına bakıyordum ... –
Harika cevap için teşekkürler – babonk