【问题标题】:Multiple Document Ready Functions (/w and /wo callbacks)多个文档就绪函数(/w 和 /wo 回调)
【发布时间】:2014-12-10 09:49:43
【问题描述】:

我正在运行多个需要文档准备就绪的功能。我有一个关于使用的问题

$(function()
{
    funA();
});

1) 以下哪项在技术上是正确的:

(a) 我猜是因为它的范围仅限于大括号内的初始函数。

    $(function()
    {
        funA(function()
        {
            $(function()
            {
                funB(function()
                {
                    $(function()
                    {
                        funC();
                    });
                });
            });
        });
    });

(b) 我推测是因为它的作用域适用于其大括号内的所有函数。

    $(function()
    {
        funA(function()
        {
            funB(function()
            {
                funC();
            });
        });
    });

(c)

都不是(请详细说明)。

2) 如果不使用回调,方法会有所不同吗?

【问题讨论】:

  • 很难理解你的问题是什么意思。你想达到什么目的?
  • 我的代码有效,我只是希望避免不必要的开销。简而言之:是否有必要调用 $(function(){ });对于应该在文档就绪时执行的每个函数,或者是否足以使用 $(function(){ });一次,它将应用于在其大括号内调用的所有函数。
  • 为什么要嵌套文档就绪函数?如果父函数已在文档中准备好,那么嵌套函数是否也已按定义准备好?
  • 嵌套是由于回调,可能有更好的方法(可能),但这只是我写的方式。

标签: jquery google-chrome-extension


【解决方案1】:

我猜问题是“$(f); 的工作原理”。

当调用$(f)(或其完整形式$(document).ready(f))时,jQuery 基本上会检查文档是否已经加载。

  1. 如果已经加载,f() 会在当前代码完成后立即排队执行。
  2. 如果尚未加载,当 jQuery 检测到适当的事件时,f添加到要排队的函数列表中。

因此,调用嵌套在回调中的$(f) 是安全的*,但没有必要,因为保证顶级回调仅在事件发生后执行,并且嵌套回调不能早于传递给它的函数。


* - 我说“安全”,因为$() 的回调永远不会立即执行,而只会排队;这可能会导致可能不需要的结果。

$(f);
g();

总是会看到g()f() 之前执行。这不适用于您的问题,但我还是想指出这一点。

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多