$(document).ready在$(document).ready中

Dav*_*mes 10 javascript jquery asynccallback jquery-callback

我在代码库中找到$(document).ready(function() {...}了另一个代码$(document).ready(function() {...}

例如

$(document).ready(function() {      

    // 20 lines... 

    $(document).ready(function() {
        foo()
    }

    // 200 lines...
}

function foo() {...}
Run Code Online (Sandbox Code Playgroud)

我想了解执行的顺序,所以我可以安全地重构这个嵌套的回调.外部回调似乎在内部回调执行之前继续执行.外部回调是否保证在内部回调被调用之前完成?

zzz*_*Bov 13

外部回调是否保证在内部回调被调用之前完成?

是.

方法document.ready是在调用回调之前等待readystatechange事件在准备就绪时等待,但是setTimeout如果readystatechange事件已经被触发,它也会运行.

这意味着代码如:

$(function () {
    a();
    $(b);
    c();
});
Run Code Online (Sandbox Code Playgroud)

where a,bc所有函数将按以下顺序执行:

  1. a
  2. c
  3. b

在一个相关的说明中,人们会质疑你为什么document.ready在另一个document.ready电话中运行一个电话,简短的回答是你不会.

唯一的好处是$(callback)比写入更方便:

setTimeout(callback, 0);
Run Code Online (Sandbox Code Playgroud)

  • 你可以在这里查看这里http://code.jquery.com/jquery-1.11.0.js在3411行.也使用了promises (3认同)