关于多个ready()的问题
假设我有:
这两个脚本都有ready()
。 script2.js的ready()
的代码是否总是在第一个之后执行?
是。
首先, script2.js
的代码将在script1.js
之后执行,因为它在文档中稍后出现(并且未设置defer
属性 )。
此外, ready
函数的实现[source]是:
ready: function( fn ) { // Attach the listeners jQuery.bindReady(); // Add the callback readyList.done( fn ); return this; },
readyList
似乎是[source] 延迟对象[docs] 。 这意味着回调按照它们添加到该对象的顺序执行。
jQuery为此使用自己的Deferred
对象。 适当的jQuery代码certificate它按顺序执行:
当你调用.ready
,该函数被添加到readyList
:
readyList.done( fn );
当DOM准备就绪时,执行以下function:
readyList.resolveWith( document, [ jQuery ] );
resolveWith
函数包含此代码,该代码执行作为回调添加的函数:
while( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); }
正如您所看到的,回调函数是shift
(从回调数组的开头弹出(即readyList
)),因此第一个readyList
在第二个之前执行。
准备好多个文件,以便它们被定义。
.ready()
函数在首次注册获得第一次处理的基础上调用