【问题标题】:What does it mean whenever a function ends with })(jQuery);?函数以 })(jQuery); 结尾是什么意思?
【发布时间】:2010-11-12 17:13:42
【问题描述】:

我试过用谷歌搜索,但谷歌似乎并不关心括号......

【问题讨论】:

标签: jquery


【解决方案1】:

如果你看到这个:

(function($) {
    // ...code using $...
})(jQuery);

它做了两件事:

  1. 定义一个匿名函数,使用$ 作为其对 jQuery 的引用。
  2. 调用它,传入jQuery

你可以这样做:

function foo($) {
    // ...code using $...
}
foo(jQuery);

...但这会创建一个不必要的符号。

所有这一切都是因为 jQuery 有符号 jQuery 和符号 $,但人们使用 jQuery.noConflict() 告诉 jQuery 将 $ 返回到 jQuery 加载时的状态并不罕见,因为其他一些流行的库(Prototype 和 MooTools,仅举两个例子)使用$,这让人们可以一起使用这些库 jQuery。但是你仍然可以在你的函数中使用$,因为参数会隐藏函数外部的符号含义。

【讨论】:

  • 为什么要使用匿名函数?如果它是匿名且不可重用的,为什么要让它成为一个函数?为什么不用表达式?
  • @polyhedron - 这个函数只运行一次,所以不需要名字。点 T.J.正在使$ 成为函数内部的局部变量,它引用全局jQuery 变量。如果您将$ 作为全局变量,如果另一个库使用相同的全局变量名,则会发生冲突。这样它是私有的,因此受到保护。
  • @polyhedron:在 JavaScript 中,只有函数可以创建新的作用域,所以如果你想创建一个私有变量,你必须使用一个函数。
【解决方案2】:

它基本上自动调用定义的匿名/lambda 函数并提供jQuery 对其的引用。

functionCall(jQuery) 几乎相同,只是您定义它并在同一行/表达式中调用它。

【讨论】:

    【解决方案3】:

    通常这些是……

    (function($) {
        // do something with $
    })(jQuery);
    

    这意味着该函数实际上是在使用jQuery 做某事(它定义了function(a) {...},然后将jQuery 传递为a),但它希望能够使用$ 而不是jQuery在函数内部。

    这允许像$(this) 之类的东西即使在无冲突模式下调用jQuery(因此$ 不会正常引用jQuery)。

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2015-04-21
      • 1970-01-01
      • 2021-01-19
      • 2021-05-16
      • 2019-10-14
      相关资源
      最近更新 更多