課程
/前端開發
/jQuery
/jQuery源碼解析(架構與依賴模塊)
為什么“腳本解析二” 比 “DOMContentLoaded回調” 先輸出呢?他們都是DOM樹渲染完成時執行啊,這里不太明白
2015-02-03
源自:jQuery源碼解析(架構與依賴模塊) 1-7
正在回答
改成這樣來看:
<script>
? ? window.addEventListener("load", function() {
? ? ? ? show('load事件回調')
? ? }, false);
? ? document.addEventListener("DOMContentLoaded", function() {
? ? ? ? show('DOMContentLoaded回調')
</script>
<script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script>
? ? show('觀察腳本加載的順序')
? ? show('腳本解析一')
? ? //測試加載
? ? $(function(){
? ? ? ? show('腳本解析二')
? ? })
? ? show('腳本解析三')
樓上說的有道理,因為jquery那個script在前,里面addEventListener DOMContentLoader事件在前,所以觸發的時候先觸發的ready.
原因是:因為先加載的JQuery后調用的document.addEventListener添加DOMContentLoaded。
注意jQuery.ready.promise里面的completed如下其實就是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
舉報
由淺入深地剖析jQuery庫的設計與實現,揭開框架背后的秘密
4 回答關于DOMContentLoaded和ready的順序
3 回答ready和DOMContentLoaded順序問題
2 回答jQuery對象與aQuery對象的差別與原因?
1 回答為什么是三比二先執行?
2 回答ready 中的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-12-12
改成這樣來看:
<script>
? ? window.addEventListener("load", function() {
? ? ? ? show('load事件回調')
? ? }, false);
? ? document.addEventListener("DOMContentLoaded", function() {
? ? ? ? show('DOMContentLoaded回調')
? ? }, false);
</script>
<script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script>
<script>
? ? show('觀察腳本加載的順序')
? ? show('腳本解析一')
? ? //測試加載
? ? $(function(){
? ? ? ? show('腳本解析二')
? ? })
? ? show('腳本解析三')
</script>
2016-01-14
樓上說的有道理,因為jquery那個script在前,里面addEventListener DOMContentLoader事件在前,所以觸發的時候先觸發的ready.
2015-04-03
原因是:因為先加載的JQuery后調用的document.addEventListener添加DOMContentLoaded。
注意jQuery.ready.promise里面的completed如下其實就是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>