【问题标题】:What is the benefit of wrapping a jquery function in a closure?在闭包中包装 jquery 函数有什么好处?
【发布时间】:2011-04-04 12:36:27
【问题描述】:

您好,我一直忙于将我的 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);

提前谢谢你。

罗伯

【问题讨论】:

标签: jquery


【解决方案1】:

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

这样做是为了可以在函数范围内使用简写 $ 来表示 jQuery。由于函数内部的所有代码都在函数的范围内,因此它是一种很好的模式,可以自我包含代码并且不会污染全局命名空间。

这也是一个很好的模式,允许您在函数内部使用 jQuery 的 $ 简写 - 可能是 $ 简写 (window.$) 被分配了其他东西,如果您在一页上使用多个库。通过使用该模式,您仍然可以在函数中使用$ 来引用jQuery 对象,以便熟悉和简洁。

【讨论】:

  • 非常感谢您抽出宝贵时间回复我的问题。太棒了!
  • 没问题,很乐意为您提供帮助 - 欢迎来到 StackOverflow!
  • 我也可以成为 javascript 最小化的优势。您可以将更多全局变量传递给函数:(function(doc, win, $, SE){ ... })(window, document, jQuery, SomethingElse);。在函数内部,docwin 和其他变量名将被大多数优化器缩短为仅一个字符。
【解决方案2】:

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

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

【讨论】:

  • 非常感谢您花时间回复。在我收到的所有问题的答案中,我现在完全理解发生了什么,更重要的是为什么。
【解决方案3】:

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

【讨论】:

  • 感谢您抽出宝贵时间回复我的问题。你真的帮助我加深了我的知识。
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2011-05-05
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
相关资源
最近更新 更多