我有一个函数,里面有一些简单的表达式,添加nums,附加doms等等.因为我只需要调用一次,所以匿名函数可以做到.但我应该选择哪种方式,区别是什么?
1:$(document).ready() {})我看过很多的简写,
$(function(){
var something;
++something;
});
Run Code Online (Sandbox Code Playgroud)
2:在jquery插件中找到.是否绑定到$(document).ready()?
(function ($) {
var something;
++something;
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
第二个是不绑定到ready事件.
详细地.这个:
$(function(){ /* ... */ });
Run Code Online (Sandbox Code Playgroud)
需要$定义一个变量.通常这个变量在加载jQuery时存在并指向jQuery函数.
随后,当您使用函数参数调用jQuery函数时,jQuery会将此函数参数绑定到该ready事件.以上相当于
jQuery(function(){ /* ... */ });
Run Code Online (Sandbox Code Playgroud)
这反过来又是一种方便的简写
jQuery(document).ready(function(){ /* ... */ });
Run Code Online (Sandbox Code Playgroud)
你的第二个代码片段
(function ($) { /* ... */ })(jQuery);
Run Code Online (Sandbox Code Playgroud)
并不依赖于$被定义或指向jQuery()(如果有多个JS框架被并行装入这可能发生).
仍有的方便$的码在一定区域内,它创建一个功能在其中 $被定义并指向jQuery().但是,不绑定到DOM事件.
但这将是:
(function ($) {
$(function(){ /* ... */ });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
此设置用于最小化JS框架或依赖的其他代码片段之间的冲突$.jQuery插件作者使用它来编写在许多环境下工作的插件.
如果您认为组合的太复杂,jQuery也有一个速记功能,它可以避免变量冲突并同时绑定document ready.但要小心,它只适用于jQuery并且有一些缺点.
jQuery(function($) { /* some code that uses $ */ });
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅以下两篇文章: