0

在 jQuery 中,您可以对各种页面和其他事件进行多次调用,如下所示:

$(document).ready(function() {

并且您可以在此过程中添加多个“就绪”函数定义,而不仅限于一个。当然,这有助于将代码定义在靠近使用它的位置。

我的问题是,如果我在其中一个document.ready函数声明中声明了一个局部变量 using var,它是否可以在document.ready页面也使用的另一个函数声明中使用?

我不确定 jQuery 在这样的情况下是如何工作的;它是否以某种方式将各种函数的作用域编织在一起,或者当触发就绪事件时这些函数中的每一个都以独立的方式运行,每个函数都不知道其他函数的变量。(我猜是第二个。)

4

2 回答 2

7

我的问题是,如果我在其中一个document.ready函数声明中声明了一个局部变量 using var,它是否可以在document.ready页面也使用的另一个函数声明中使用?

不,它们是您传入的函数的局部变量document.ready

我不确定 jQuery 在这样的情况下是如何工作的;它是否以某种方式将各种函数的作用域编织在一起,或者当触发就绪事件时这些函数中的每一个都以独立的方式运行,每个函数都不知道其他函数的变量。(我猜是第二个。)

你是对的。:-) 事实上,jQuery不能混合函数的执行上下文,它们是由 JavaScript 引擎管理的。

但是,您可以通过将它们全部放在容器函数中来使它们都共享一个父执行上下文:

(function() {
    // Shared by all functions within this block
    var foo = 42;

    // ...

    $(document).ready(function() {
        if (foo === 42) {
            // ...
            --foo;
        }
    });

    // ...

    $(document).ready(function() {
        if (foo > 0) {
            // ...
            --foo;
        }
    });

})();

我不认为我会提倡拥有多个ready处理程序(或者甚至是一个,真的),除非你正在编写一个库。但这是一个不同的话题。

于 2012-11-08T15:53:09.217 回答
2

不,不会的。每个$(document).ready人都会定义自己的范围。如果您需要两者都可见的东西,您可以将其设为全局,或$(document).ready在另一个闭包中定义所有内容(例如,使用自调用函数)。

于 2012-11-08T15:55:42.763 回答