关于多个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()函数在首次注册获得第一次处理的基础上调用