jQuery document.ready 多次声明

4
我意识到我可以多次指定$(document).ready(function(){});。比如说:
$(document).ready(function(){
    var abc = "1122";
    //do something..
});

$(document).ready(function(){
    var abc = "def";
    //do something..
});
  1. 这是标准的吗? 这些代码可以在我的FF(16.0.2)上运行。我稍微有点担心其他浏览器可能不支持。
  2. 实际发生了什么?jQuery是如何处理这些代码的?

谢谢。


请尝试这个 - chridam
3个回答

10

是的,这是标准和推荐的方式,并且jQuery保证这些函数将按照声明的顺序执行(有关实现细节,请参见此相关答案)。

abc变量是局部的,不会相互干扰。你不能从另一个回调函数中看到在其中一个回调中声明的abc的值。


1
只是补充一下,这样做的主要原因是允许您在多个js文件中指定load处理程序,以便您可以将代码分隔开。 - Rory McCrossan
是的,我现在实际上已经实现了加载+多个js。现在只是好奇,我能否在第一次声明中获取“var abc”(其值为“1122”),而无需全局声明“var abc”? - Hendry H.
我不确定我理解你的问题,但是如果你想在第二个回调中获取在第一个回调中声明的abc的值,那么你应该将它声明为window.abc="1122"; - Denys Séguret
@dystroy 是的,这就是我想做的。但是我有太多的多个js文件(每个文件都有document.ready函数),而且有些文件内部具有相同的变量名称。像window.abc这样全局声明将使其唯一,并且在我的情况下不起作用。我想在特定的document.ready块中获取某些var abc。这可行吗? - Hendry H.
@dystroy 非常感谢您的解释。~ - Hendry H.
显示剩余2条评论

1

是的,在同一页中可以使用多个document.ready函数。它不会在任何浏览器中产生任何错误或异常,并且该函数将按照从上到下的顺序执行。


1
“upper to lower”与它们被调用的顺序不同,真正执行的顺序是后者。 - Ian

0

尽管这是标准做法,但我宁愿只使用一个$(document.ready)……以保持DRY,否则您可能会在页面上得到10个这样的声明,这将使其看起来像难以维护的意大利面条代码(但JS也允许您这样做)


是的,我确实这样做了。但是随着代码越来越多,行数也越来越多。在超过1000行后,我最终停下来并将其拆分为多个JS文件。当然,结合load方法后,现在变得非常整洁。 - Hendry H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接