在jQuery中,您可以对各种页面和其他事件进行多次调用,如下所示:
$(document).ready(function() {
您可以在此过程中添加多个“就绪”功能定义,但不限于一个。当然,这有助于将代码定义为接近使用它的位置。
我的问题是,如果在其中一个document.ready
函数声明中我使用var
声明了一个局部变量,它是否会在页面也使用的另一个document.ready
函数声明中可用?
我不确定jQuery在这样的情况下是如何工作的;它是否以某种方式将各种函数的范围编织在一起,或者当ready事件被触发时,每个函数是否以独立方式运行,每个函数都不知道其他函数的变量。 (我猜第二个。)
答案 0 :(得分:7)
我的问题是,如果在其中一个
document.ready
函数声明中我使用var
声明了一个局部变量,它是否会在页面也使用的另一个document.ready
函数声明中可用?
不,它们是您传递给document.ready
的函数的局部变量。
我不确定jQuery在这样的情况下是如何工作的;它是否以某种方式将各种函数的范围编织在一起,或者当ready事件被触发时,每个函数是否以独立方式运行,每个函数都不知道其他函数的变量。 (我猜第二个。)
你是对的。 :-)实际上,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
处理程序(甚至是一个)。但这是一个不同的话题。
答案 1 :(得分:2)
不,不会。每个$(document).ready
将定义它自己的范围。如果你需要两者都可见,你可以使它成为全局,或者在另一个闭包中定义所有$(document).ready
(例如使用自调用函数)。