jquery文件的执行顺序准备就绪

Amr*_*rit 30 jquery

假设,我有一个看起来像这样的js文件:

$(document).ready(function() { // first task} );
$(document).ready(function() { // second task } );
$(document).ready(function() { // third task } );
Run Code Online (Sandbox Code Playgroud)

加载文件后,任务按顺序执行.我无法理解为什么?我猜测当"就绪"事件发生时会触发回调方法.如何保留执行顺序?连续的回叫是否在某个地方排队?

注意:我知道这是一种非常天真的编码方式.我编写了代码片段只是为了表明我的观点并且不在我的项目中编写这样的代码.

Nic*_*ver 31

您的处理程序将被推入一个数组(readyList),以便稍后document 准备就绪时按顺序执行.

他们像这样排队:

readyList.push( fn );
Run Code Online (Sandbox Code Playgroud)

并在准备好后执行:

var fn, i = 0;
while ( (fn = readyList[ i++ ]) ) {
  fn.call( document, jQuery );
}
Run Code Online (Sandbox Code Playgroud)

如果文档已经准备好,那么它们将立即执行,这仍然是有序的.


med*_*iev 5

您指定的功能按顺序添加到列表中.当DOM准备就绪时,jQuery遍历该列表并按该顺序调用函数.

你的清单变成了......

handlers = [ function(){ alert('first') }, function() { alert('second')} ];
Run Code Online (Sandbox Code Playgroud)

然后一个循环遍历...

for ( var i = 0, l = handlers.length; i<l; ++i ) {
    handlers.apply( document, arguments )
}
Run Code Online (Sandbox Code Playgroud)

并且在文档的上下文中调用这些函数.