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

时间:2010-08-26 21:24:10

标签: 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);

提前谢谢。

罗布

3 个答案:

答案 0 :(得分:7)

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

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

这也是一个很好的模式,允许你在函数内部使用$简写为jQuery - 可能是$简写(window.$)被分配的东西否则,如果您在一个页面上使用多个库,就会发生这种情况。通过使用该模式,您仍然可以使用$来引用函数中的jQuery对象,以获得熟悉和简洁。

答案 1 :(得分:4)

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

(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将在它准备好时(当文档加载时)调用你的函数,并将自己作为函数的第一个参数传递。

答案 2 :(得分:1)

这会将jQuery映射到$以获取闭包的范围,从而防止与其他可能声称$ namespace的库(例如MooTools)发生冲突。