2010-05-28 115 views
23

以下假设是否准确?jquery匿名函数声明的含义

1)立即执行

(function(){ 
})(); 

2)上执行文件准备

$(document).ready(function(){ 
}); 

3)的简写用在文档准备

$(function(){ 
}); 

4)替代简写上文件准备用于避免交叉脚本冲突

(function($) { 
})(jQuery); 
+1

最后一个常用于定义插件。 – 2010-05-28 17:08:43

+0

编辑你的编号给它更好的代码格式,降价不喜欢直接在数字之下的代码,无论出于何种原因:) – 2010-05-28 17:14:04

+0

干杯尼克,很好的 – 2010-05-28 17:19:22

回答

19

是你的定义是正确的,第3 :)

虽然,除非你需要一个封闭,一个语句将立即执行,没有理由把它包起来像#1(当然也有很多有效的时间你需要关闭,只是注意如果你不......这是多余的)。然而

4号是不正确的,(function($) { })(jQuery);不依赖于任何情况下,它只是一个封闭,使$ === jQuery里面的,所以你可以使用$快捷:

(function($) { 
    //You may use $ here instead of jQuery and it'll work...even if $ means 
    //something else outside of this closure, another library shortcut for example 
})(jQuery); 
+0

非常丰富的答案。 Number 4主要用于防止自$ jquery文件被加载后在全局范围内覆盖$! – 2010-05-28 17:26:38

+4

@ yaya3 - 是的,通常是['.noConflict()'](http://api.jquery.com/jQuery.noConflict/)让另一个库控制'$'的结果。但是,如果你想'document.ready'并且没有冲突,那么也有一个简短的版本,jQuery将它自己作为参数传递给ready处理程序,所以'jQuery(document).ready(function($){});'或者较短的'jQuery(function($){});'获得'''传递进来,更多的本地''== === jQuery'里面以及代码在'document.ready'上触发,漂亮整洁。或者使用任何其他名称:),例如'jQuery(function(myVar){myVar('#myElem')。hide();});' – 2010-05-28 17:30:30

+0

太棒了,在这里学到了很多东西。谢谢 – 2010-05-28 17:31:51

9

这里的#4你正在寻找:

jQuery(function ($) { 
}); 

它将运行在document.ready上,命名空间内,并定义为$的jQuery。

+0

这样写出来的辉煌的方式,将给我们带来美元的力量,而不会带来负面影响。 – rncrtr 2012-08-13 18:03:05