jquery匿名函数声明的含义

Dr.*_*ein 23 javascript jquery

以下假设是否准确?

1)立即执行

(function(){
})();
Run Code Online (Sandbox Code Playgroud)

2)执行文件就绪

$(document).ready(function(){
});
Run Code Online (Sandbox Code Playgroud)

3)准备好文件的简写

$(function(){
});
Run Code Online (Sandbox Code Playgroud)

4)准备文件的替代速记,以避免交叉脚本冲突

(function($) {
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 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);
Run Code Online (Sandbox Code Playgroud)

  • @ 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();});` (4认同)

Mag*_*nar 9

这是你要找的#4:

jQuery(function ($) {
});
Run Code Online (Sandbox Code Playgroud)

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