jquery ready 与window.onload的有什么区别

 我来答
我只会点亮LED
2017-11-06 · TA获得超过152个赞
知道答主
回答量:62
采纳率:100%
帮助的人:39.4万
展开全部
扒了一下jquery2.0的源码。把几个关键的片段放出来。
//1 
completed = function() {
document.removeEventListener( "DOMContentLoaded", completed, false );
window.removeEventListener( "load", completed, false );
jQuery.ready();
};

//2 
jQuery.fn = jQuery.prototype = {
ready: function( fn ) {
//
jQuery.ready.promise().done( fn );
return this;
},
}

//3 
jQuery.ready.promise = function( obj ) {
if ( !readyList ) {
readyList = jQuery.Deferred();
if ( document.readyState === "complete" ) {
  setTimeout( jQuery.ready );
} else {
document.addEventListener( "DOMContentLoaded", completed, false );
window.addEventListener( "load", completed, false );
}
}
return readyList.promise( obj );
};

//4
jQuery.extend({
Deferred: function( func ) {
//这里代码太复杂。不扒了。
//但是大概可以理解,并简化为这样。
  return {
    done:function(fn){
   fn.call( document ,Jquery );
}
  };


所以:$(document).ready(fn);实际上就是监听window.onload事件。然后添加事件函数的。没什么区别。
但有一点要注意:用了window.onload=function(){}就不要用$(document).ready(function(){});
否则会执行两次初始化。原因是,jquery的ready通过addEventListener实现的,意味着和window.onload不冲突。它
所以一个window.onload就绑定了两个函数。就会执行两次。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式