在闭包中包装jquery函数有什么好处?

use*_*350 8 jquery

您好我一直忙于试图把我的jQuery知识到一个新的水平,到目前为止,我想我已经明白了一切但是如我斗胆到更高级教程我注意到几个实例,其中JQuery的程序包在一个闭包(见下文)然而,令我困惑的是它传递$并返回JQuery.我的问题是为什么?我可以用返回的JQuery做什么?

我真的很感激人们可以为我提供的任何亮点.

(function($){
  $(document).ready(function(){
    var arr = $.map($("LI"), function(item, index){
      while (index < 3)
      {
        return $(item).html();
      }
      return null;
    });
    $(document.body).append("<span>The first three authors are: " +
      arr.join(", ") + "</span>");
  });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

先感谢您.

Rus*_*Cam 8

它是一个自调用匿名函数(一个声明并立即执行的未命名函数),它接受一个被赋值给参数的参数$.传递给参数的值是jQueryjQuery函数.

这样做是为了$可以在函数范围内使用简写来表示jQuery.由于函数内部的所有代码都在函数的范围内,因此对于包含代码而不污染全局命名空间的self来说,这是一个很好的模式.

它也是一个很好的模式,允许你$在函数内部使用jQuery 的简写 - 可能是$简写(window.$)被赋予其他东西的情况,如果你在一个页面上使用多个库就会发生这种情况.通过使用模式,你仍然可以使用$引用jQuery对象的功能熟悉和简洁.


yfe*_*lum 5

如果您正在编写插件,请使用

(function($) {
  //stuff that uses the jquery lib using $
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

这相当于

var __myf = function($) {
  //stuff that uses the jquery lib using $
};
__myf(jQuery);
Run Code Online (Sandbox Code Playgroud)

如果您正在编写页面代码,请使用

jQuery(function($) {
  //stuff that uses the jquery lib using $
});
Run Code Online (Sandbox Code Playgroud)

在这里,jQuery 将在准备好(加载文档时)调用您的函数,并将自身作为第一个参数传递给您的函数。