我已经看过了(我也在使用它):
$(document).ready(function(){
// do jQuery
})
还有这个(我最近尝试过):
(function(){
// do jQuery
})(jQuery)
两者都很好。
两者有什么不同(除了看起来如何)?
哪一个更适合使用?
答案 0 :(得分:38)
您展示的第二个示例是自执行匿名函数。您使用的每个单独的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就绪函数结合起来,如下所示:
jQuery(function($){
// $ = jQuery regardless of what it means
// outside this DOM ready function
});
答案 1 :(得分:30)
第一个示例在构建DOM树时运行该函数。 第二个例子立即运行该功能。
如果你仔细观察,在第二个例子中,在函数声明之后有两个括号(在这种特殊情况下,你传入全局jQuery
对象作为参数以避免冲突),从而立即调用功能
使用的正确功能取决于您希望函数运行的时间。
如果您想在DOMReady
(ready
事件)上运行某个功能,可以使用您提到的$( document ).ready
或速记$( function() {...} )
。
否则,如果要立即运行函数并具有匿名函数作用域,请使用第二个示例。
答案 2 :(得分:5)
除了之前的所有答案, jQuery有三种可以使用的初始化方法:
与大多数浏览器兼容的传统方法,请参阅代码:
$(document).ready(function () {
});
简介方法,见代码:
$(function () {
});
隐式方法,参见代码:
$().ready(function () {
});
它们都适用于现代浏览器并且可以安全使用。
答案 3 :(得分:3)
我总是使用第一个。第二种似乎是一种防止jquery被覆盖的方法。您可能会这样做的一个原因是,如果您不知道页面上将加载哪些其他脚本。如果所有的东西都依赖于jquery 1.3,并且你处于一个你不控制整个页面的环境中,那么如果有人在jquery 1.4中加载你的代码就会破坏。听起来很难看,但这种事情确实发生了。所以你可以通过在加载jquery后立即创建一个闭包来覆盖你的屁股,并在你的闭包中保存你的jquery版本。我认为这是第二个例子中发生的事情。
两者都没有实际初始化jquery。 Jquery负责自己需要的任何初始化。即使你使用的是第二个例子,你仍然很可能会使用第一个例子,你只需要在第二个例子中将$(document).ready 放在函数中。 / p>
答案 4 :(得分:1)
尽管这是一个古老的话题,但我想分享一下初始化jQuery的方法
;(function($, window, document) {
// Your Code Goes Here
}(window.jQuery, window, document));
这样,您可以确定不会出错。