2010-02-07 106 views
34

我已经看到了这一点(我也使用它):我应该如何初始化jQuery?

$(document).ready(function(){ 
    // do jQuery 
}) 

而且这(最近我尝试过):

(function(){ 
    // do jQuery 
})(jQuery) 

都工作得不错。

两者的区别是什么(除了它的外观)?

哪一个更适合使用?

回答

28

第一个示例在构建DOM树时运行该函数。 第二个示例马上运行该功能。

如果你仔细观察,在第二个例子中,有两个括号中的函数声明之后(在此特定情况下,在全局jQuery对象作为参数传递,以避免冲突),从而立即调用该函数

使用正确的函数取决于您希望函数何时运行。 如果要运行DOMReadyready事件)上的功能,可以使用$(document).ready(如上所述)或简写形式$(function() {...})。否则,如果要立即运行函数并具有匿名函数作用域,请使用第二个示例。

3

我总是使用第一个。第二种似乎是防止jquery被重写的一种方法。您可能会这样做的一个原因是,如果您不知道将在页面上加载哪些其他脚本。如果你的所有东西都依赖于jQuery 1.3,并且你处于一个你不控制整个页面的环境中,那么如果有人在jquery 1.4中加载,你的代码可能会中断。听起来很丑陋,但这种事情确实发生了。所以你可以通过在加载jquery后立即创建一个闭包来遮住你的屁股,并且在你的闭包中保存jquery的版本。我想第二个例子就是这样。

两者都没有实际初始化jquery。 Jquery负责它自己需要的任何初始化。即使您使用第二个示例,您仍然很可能会使用第一个示例,您只需在第二个示例中将$(document).ready 放入函数中。

+0

我认为$(function(){...})是首选,因为它允许jQuery作者可能会想到一个更好的方式来运行这些初始化函数,而不是“ready”事件,而您的代码仍然可以工作。我想我已经阅读过,事实上显式绑定到“就绪”事件已被弃用,除非你明确知道你想要做到这一点。 – Pointy 2010-02-07 04:39:15

34

你显示的第二个例子是一个自动执行的匿名函数。您使用的每个单独的JS文件都可能从使用它中受益。它提供了一个私人的范围,你与var关键字声明的一切仍然只是范围内:

(function($){ 
    var special = "nice!"; 
})(jQuery); 

alert(special); // would be undefined 

第一个例子是$(document).ready速记时,DOM可以被操纵的时候触发。

一些很酷的事情。首先,你可以用它的自我执行的函数内部:

(function($){ 
    $(function(){ 
     // Run on DOM ready 
    }); 

    // Run right away 
})(jQuery); 

其次,如果你需要的是在文档中的几行准备好了,你可以这样结合了私人范围和DOM ready函数:

jQuery(function($){ 
    // $ = jQuery regardless of what it means 
    // outside this DOM ready function 
}); 
+0

嗯,有兴趣知道什么时候你的例子 - '(函数($){$(function(){'将被使用吗? – 2010-06-20 23:31:36

+1

任何时候你有需要立即运行的代码,并且另外在文档准备好的情况下,想把整个文件包装在'(function($){...}(jQuery))'中,然后你可以在需要的地方使用'$'而不会产生冲突。然后,当你需要'DOM Ready'时只需使用'$(function(){...})' – 2010-06-21 00:00:51

3

除了以前所有的答案, 的jQuery有一个可以使用的三种初始化方法:大多数浏览器

传统的方法兼容,见代码:

$(document).ready(function() { 

     }); 

的速记方法,请参阅代码:

$(function() { 

     }); 

隐含的方法,请参阅代码:

$().ready(function() { 

     }); 

他们的现代浏览器和安全的所有工作中使用。

相关问题