假设我有一个看起来像这样的js文件:
$(document).ready(function() { // first task} );
$(document).ready(function() { // second task } );
$(document).ready(function() { // third task } );
加载文件后,任务按顺序执行。我无法理解为什么? 我猜测当“就绪”事件发生时会触发回调方法。如何保留执行顺序?连续的回叫是否在某个地方排队?
注意:我知道这是一种非常天真的编码方式。我编写了代码片段只是为了解释我的观点并且不在我的项目中编写这样的代码。
答案 0 :(得分:31)
当document
pushed into an array时,您的处理程序正在readyList
in order later)执行is ready。
readyList.push( fn );
And executed when ready like this:
var fn, i = 0;
while ( (fn = readyList[ i++ ]) ) {
fn.call( document, jQuery );
}
如果文件已经准备就绪,那么它们将立即执行,这仍然是有序的。
答案 1 :(得分:5)
您指定的功能按顺序添加到列表中。当DOM准备就绪时,jQuery遍历该列表并按该顺序调用函数。
您的列表就像......
handlers = [ function(){ alert('first') }, function() { alert('second')} ];
然后循环遍历......
for ( var i = 0, l = handlers.length; i<l; ++i ) {
handlers.apply( document, arguments )
}
在文档的上下文中调用函数。
答案 2 :(得分:1)
这不是更好,但在$(窗口).load内你可以有更多的控制权。在$(文件).ready
之后$(window).load( fn );