5.ready

参考文章
https://segmentfault.com/a/1190000005762854

ready其实自己看看基本能看明白,我写在这里只是为了记录一下,我还是和之前一样,看的是2.0.3的版本,我找了一下,发现以前的版本ready的检测内容更多些,比如参考文章里面是1.8.3版本

先看2.0.3,搜一下ready:可以发现两个,一个很简单,就两句话

jQuery.ready.promise().done( fn );
return this;

这个是挂在jQuery.fn里面的,还有一个是JQuery.extend扩展的,稍微多点,等会儿看

我们平时写ready的时候通常有三种写法

$(document).ready(function)
$().ready(function)
$(function)

$(function)这种方式,显然是先走了JQuery的构造方法,也就是jQuery.fn.init,在init里找一下,可以发现

else if ( jQuery.isFunction( selector ) ) {
	return rootjQuery.ready( selector );
}

上面这个rootjQuery就是jQuery(document),所以这三种写法其实是一模一样的,都是跑到了jQuery.fn.ready里面,执行了jQuery.ready.promise().done(fn)

这个时候这代码看起来像是jQuery.ready是个deferred,然后执行了promise(),其实不是,其实是有个jQuery.ready.promise()函数(汗),搜一下jQuery.ready.promise可以找到,在这个函数里添加了document的DOMContentLoaded和window的load事件的检测(并且绑定了completed函数),返回了一个readyList.promise(),代码很少,自己看一眼

然后就是等待事件触发,事件触发以后,(completed函数里)调用了jQuery.ready(),这就是刚才我们没看的那个ready,里面有一句readyList.resolveWith( document, [ jQuery ] );,这个就是刚才jQuery.ready.promise()函数里的那个deferred,然后传给jQuery.fn.ready的回调就可以执行了。

1.8.3版本多一些检测内容,onreadystatechange、doScroll等,流程还是一样的(大概)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值