2种写jquery的方式,有什么区别?

Ruf*_*fus 1 javascript jquery

我有一个函数,里面有一些简单的表达式,添加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)

Tom*_*lak 6

第二个是绑定到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)

有关详细信息,请参阅以下两篇文章:

  1. 将jQuery与其他库一起使用
  2. .ready()@ api.jquery.com(别名jQuery命名空间)