我在我的代码库中找到了在另一个$(document).ready(function() {...}
中有$(document).ready(function() {...}
的代码。
例如:
$(document).ready(function() {
// 20 lines...
$(document).ready(function() {
foo()
}
// 200 lines...
}
function foo() {...}
我想了解执行的顺序,这样我就可以安全地重构出这个嵌套回调。外部回调似乎在内部回调执行之前继续执行。外部回调是否保证在调用内部回调之前完成?
发布于 2014-03-14 20:18:14
外部回调是否保证在调用内部回调之前完成?
是。
document.ready
的工作方式是,它将等待readystatechange事件在回调被调用之前触发,但是如果readystatechange事件已经触发,它也会运行setTimeout
。
这意味着代码,如:
$(function () {
a();
$(b);
c();
});
其中a
、b
和c
都是按以下顺序执行的函数:
a
c
b
与此相关的是,人们会质疑为什么要在另一个document.ready
调用中运行一个document.ready
调用,而简单的回答是,您不会这样做。
唯一的好处是,$(callback)
比以下内容更便于编写:
setTimeout(callback, 0);
发布于 2014-03-14 20:18:36
您应该删除内部$(文档).ready,并为该回调指定一个名称。然后调用它作为最后一行,外部回调。
发布于 2014-03-14 20:20:57
是。事件侦听器存储在堆栈中,每次触发事件时只弹出一个。这个“准备”监听器只是将另一个“就绪”侦听器添加到堆栈的末尾。因此,当第一个(外部)一个全部完成执行时,浏览器继续向下堆栈.直到它到达第二个(内部)一个,然后它执行这个。
https://stackoverflow.com/questions/22414842
复制相似问题