javascript - $(document).ready 里面 $(document).ready

标签 javascript jquery jquery-callback asynccallback

我在我的代码库中发现代码在另一个 $(document).ready(function() { ...

例如

$(document).ready(function() {      

    // 20 lines... 

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

    // 200 lines...
}

function foo() {...}

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

最佳答案

Is the outer callback guaranteed to finish before the inner callback gets called?

是的。

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

这意味着代码如:

$(function () {
    a();
    $(b);
    c();
});

其中abc都是函数,会按照以下顺序执行:

  1. 一个
  2. c
  3. b

在相关说明中,人们会质疑为什么您想要在另一个document.ready 调用中运行一个document.ready 调用,简短的回答是你不会。

唯一的好处是 $(callback) 写起来比:

setTimeout(callback, 0);

关于javascript - $(document).ready 里面 $(document).ready,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414842/

相关文章:

javascript - 仅在不写入时获取 javascript keydown 事件

javascript - 在每个 show() 上创建新的模式对话框

JQuery 回调并返回第一次调用?

javascript - 任何客户端 haml 解析器?

javascript - 如何上传到cdnjs?

javascript - 播放 FLV 时调用 JavaScript 函数

javascript - 从浏览器中删除历史点

ajax - $(this) 对象在 AJAX 回调中不可用

jquery - 在 Javascript/jQuery 中将匿名函数传递给自定义事件触发器

javascript - 多次单击按钮,在 JavaScript 中播放多个音频(旧声音重叠新声音)