課程
/前端開(kāi)發(fā)
/jQuery
/jQuery源碼解析(架構(gòu)與依賴模塊)
為什么“腳本解析二” 比 “DOMContentLoaded回調(diào)” 先輸出呢?他們都是DOM樹(shù)渲染完成時(shí)執(zhí)行啊,這里不太明白
2015-02-03
源自:jQuery源碼解析(架構(gòu)與依賴模塊) 1-7
正在回答
改成這樣來(lái)看:
<script>
? ? window.addEventListener("load", function() {
? ? ? ? show('load事件回調(diào)')
? ? }, false);
? ? document.addEventListener("DOMContentLoaded", function() {
? ? ? ? show('DOMContentLoaded回調(diào)')
</script>
<script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script>
? ? show('觀察腳本加載的順序')
? ? show('腳本解析一')
? ? //測(cè)試加載
? ? $(function(){
? ? ? ? show('腳本解析二')
? ? })
? ? show('腳本解析三')
樓上說(shuō)的有道理,因?yàn)閖query那個(gè)script在前,里面addEventListener DOMContentLoader事件在前,所以觸發(fā)的時(shí)候先觸發(fā)的ready.
原因是:因?yàn)橄燃虞d的JQuery后調(diào)用的document.addEventListener添加DOMContentLoaded。
注意jQuery.ready.promise里面的completed如下其實(shí)就是jQuery.ready()。
function completed() {
document.removeEventListener( "DOMContentLoaded", completed, false );
window.removeEventListener( "load", completed, false );
jQuery.ready();
}
你可以換下位置再試試比如:
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
console.log("DOMContentLoaded");
}, false);
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
$(function() {console.log("jquery.ready");});
chen87870098
舉報(bào)
由淺入深地剖析jQuery庫(kù)的設(shè)計(jì)與實(shí)現(xiàn),揭開(kāi)框架背后的秘密
3 回答ready和DOMContentLoaded順序問(wèn)題
4 回答關(guān)于DOMContentLoaded和ready的順序
2 回答jQuery對(duì)象與aQuery對(duì)象的差別與原因?
1 回答為什么是三比二先執(zhí)行?
2 回答ready 中的問(wèn)題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-12-12
改成這樣來(lái)看:
<script>
? ? window.addEventListener("load", function() {
? ? ? ? show('load事件回調(diào)')
? ? }, false);
? ? document.addEventListener("DOMContentLoaded", function() {
? ? ? ? show('DOMContentLoaded回調(diào)')
? ? }, false);
</script>
<script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script>
<script>
? ? show('觀察腳本加載的順序')
? ? show('腳本解析一')
? ? //測(cè)試加載
? ? $(function(){
? ? ? ? show('腳本解析二')
? ? })
? ? show('腳本解析三')
</script>
2016-01-14
樓上說(shuō)的有道理,因?yàn)閖query那個(gè)script在前,里面addEventListener DOMContentLoader事件在前,所以觸發(fā)的時(shí)候先觸發(fā)的ready.
2015-04-03
原因是:因?yàn)橄燃虞d的JQuery后調(diào)用的document.addEventListener添加DOMContentLoaded。
注意jQuery.ready.promise里面的completed如下其實(shí)就是jQuery.ready()。
function completed() {
document.removeEventListener( "DOMContentLoaded", completed, false );
window.removeEventListener( "load", completed, false );
jQuery.ready();
}
你可以換下位置再試試比如:
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
console.log("DOMContentLoaded");
}, false);
</script>
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function() {console.log("jquery.ready");});
</script>