本文主要是介绍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等,流程还是一样的(大概)
这篇关于5.ready的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!