7

我有以下插件:

;(function($, window, document)
{
...
...

})(jQuery, window, document);

我能理解 ; 是为了并且也意识到 $ 是 jQuery 但有人可以解释为什么函数后面是 (jQuery, window, document);

4

5 回答 5

11

它被称为“自我调用”或“立即调用”功能。这意味着该函数在使用最后一组括号中的参数创建后立即运行。

更多信息

于 2012-10-04T09:22:17.457 回答
4

这称为立即调用函数表达式自执行匿名函数。它使开发人员能够隐藏他的私有声明。

;(                                 // <---------------+
                                   //                 | encapsulate the function
  function($, window, document) {  // <--+ declare    | and call it passing three
                                   //    | anonymous  | arguments.
  }                                // <--+ function   |
                                   //                 |
)(jQuery, window, document);       // <---------------+
于 2012-10-04T09:31:30.620 回答
3

我不确定我是否完全理解您的要求,但他们所做的是将jQuery对象、window对象和document对象传递给函数。

他们很可能出于性能原因这样做。这使得最小化器可以缩短对和之类的所有引用windowdocument因为wd是局部变量。在大型库中,这可以节省几个字节。

此外,我相信(没有参考 atm)与全局变量相比,访问局部变量会稍微快一些(虽然实际上是一个微优化)。

于 2012-10-04T09:23:21.390 回答
1

这是一个立即调用的函数表达式

这意味着,该函数被立即声明和执行。这样做是为了创建一个新的范围。

于 2012-10-04T09:22:27.023 回答
1

这是一个立即调用的匿名函数(所谓的 IIFE)。

jQuery别名传递给$window因此document他们可以确保引用是外部环境中的正确版本。

于 2012-10-04T09:22:41.687 回答