0

嘿伙计们,我发现了一个非常有趣的网站模板,它的头文件中有以下几行:

(function($){
 $(function(){

…normal jquery

 }); // end of document ready
})(jQuery); // end of jQuery name space 

这意味着什么?我想如果我想使用 domready 我必须写:

$(document).ready(function(){

区别在哪里,我可以改变吗?感谢您的帮助

4

2 回答 2

4

$(function() {只是的快捷方式$(document).ready(function() {它们是等价的。(function($){....})(jQuery);部分只是为了兼容性,所以它$是范围内的对象jQuery(即使它是外部的其他东西)。

这里需要注意的是:document.ready处理程序接收jQuery作为他们的第一个参数,因此站点的代码可以更简洁地表示为:

jQuery(function($){
  …normal jquery
}); // end of document ready

所以回答你的问题:你必须改变它吗?不,使用您喜欢的任何一种格式...我更喜欢$(function() { });因为它的输入更少,而且我每天会做一百次。如果您发现$(document).ready(function() { });更清晰,请坚持下去,但它们的行为相同......所以使用对您和您的团队更清晰的那个。

于 2010-11-07T11:48:15.897 回答
1

您引用的代码的 DOM 就绪部分:

$(function() {
  // Document is ready let's write some jQuery!
});

完全等同于:

$(document).ready(function () {
   // Document is ready let's write some jQuery!  
});

包装 DOM 就绪的东西的部分是为了一个完全独立的目的:

(function($) {
  ...
})(jQuery); // end of jQuery namespace

上面其实是一个函数调用。您正在调用一个匿名函数并将jQuery对象作为参数传入,然后将其分配给 parameter $。这确保了里面的所有代码(我有...)都可以使用$知道它引用jQuery.

这是人们使用的故障保护,因为其他一些 JavaScript 代码可能已将$变量分配给jQuery全局命名空间之外的其他对象。jQuery通过将您的 jQuery 代码包装在一个分配给的函数中(记住——只有函数在 JavaScript 中具有作用域)$,您是安全的。

于 2010-11-07T12:01:41.600 回答