jquery:帮助domready和$之间的区别(函数...

时间:2010-11-07 11:47:13

标签: jquery domready

嘿伙计们, 我找到了一个非常有趣的网站模板,在其头文件中有以下几行:

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

…normal jquery

 }); // end of document ready
})(jQuery); // end of jQuery name space 
这是什么意思?我想如果我想用domready我要写:

$(document).ready(function(){

区别在哪里可以改变吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分:4)

$(function() {只是$(document).ready(function() { (function($){,它们是等效的。 })(jQuery); .... $部分仅用于兼容性,因此jQuery是范围内的document.ready对象(即使它是外部的其他内容)。

此处需要注意:jQuery处理程序接收jQuery(function($){ …normal jquery }); // end of document ready 作为第一个参数,因此网站的代码可以更简洁地表达为:

$(function() { });

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

答案 1 :(得分: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对象作为参数传递,然后将其分配给参数$。这可以确保内部的所有代码(我已经...)可以使用$知道它引用jQuery

这是人们使用的故障保护,因为其他一些JavaScript代码可能已将$变量分配给全局namspace中的jQuery以外的其他内容。通过将jQuery代码包装在一个函数中(请记住 - 只有函数具有JavaScript范围)将jQuery分配给$,您就是安全的。