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

在闭包中包装jquery函数有什么好处?,jquery,Jquery,大家好,我一直在忙着将我对JQuery的了解提升到一个新的层次,到目前为止,我想我已经理解了一切,但在我尝试更高级的教程时,我注意到了几个JQuery例程被包装在闭包中的实例(见下文),然而,让我困惑的是,它传递了一个$并返回JQuery。我的问题是为什么?我可以如何处理返回的JQuery 我真的很感激人们能为我提供的任何信息 (function($){ $(document).ready(function(){ var arr = $.map($("LI"), function(i

大家好,我一直在忙着将我对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);
(函数($){
$(文档).ready(函数(){
var arr=$.map($(“LI”),函数(项,索引){
而(指数<3)
{
返回$(item.html();
}
返回null;
});
$(document.body).append(“前三位作者是:+
arr.join(“,”+”);
});
})(jQuery);
先谢谢你


Rob

它是一个自调用匿名函数(声明并立即执行的未命名函数),它接受一个参数,该参数被分配给参数
$
。为参数传入的值是jQuery函数
jQuery

这样做是为了在函数范围内使用速记
$
来表示jQuery。由于函数内部的所有代码都在函数的作用域中,因此这是一种很好的模式,可以自包含代码,而不会污染全局名称空间


这也是一种很好的模式,允许您在函数内部为jQuery使用
$
速记-可能是
$
速记(
窗口。$
)分配了其他内容,如果您在一个页面上使用多个库,就会发生这种情况。通过使用该模式,您仍然可以使用
$
在函数中引用
jQuery
对象,以便于熟悉和简洁。

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

(function($) {
  //stuff that uses the jquery lib using $
})(jQuery);
这相当于

var __myf = function($) {
  //stuff that uses the jquery lib using $
};
__myf(jQuery);
如果您正在编写页面代码,请使用

jQuery(function($) {
  //stuff that uses the jquery lib using $
});

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

这将jQuery映射到$作为闭包的范围,防止与其他也可能声明$名称空间的库(例如MooTools)发生冲突。

jQuery在哪里返回?我看不见。你能说得更具体些吗?而且,
$
从未通过。现在看,我可以看出我的问题措词含糊不清。我现在了解到,自调用函数接受参数$,该参数传递给全局jQuery对象的参数。重复的,非常感谢您花时间回答我的问题。明亮的没问题,很乐意帮助-欢迎使用StackOverflow!我还可以成为javascript最小化的一个优势。您可以向函数传递更多全局变量:
(函数(doc,win,$,SE){…})(窗口,文档,jQuery,SomethingElse)。在函数中,
doc
win
和其他变量名将被大多数优化器缩短为一个字符。非常感谢您花时间回复。在我收到的所有关于我的问题的答案中,我现在完全明白发生了什么,更重要的是为什么。感谢您抽出时间回答我的问题。你真的帮助我加深了我的知识。