【发布时间】:2012-10-04 09:20:14
【问题描述】:
我有以下插件:
;(function($, window, document)
{
...
...
})(jQuery, window, document);
我能理解 ;是为了并且也意识到 $ 是 jQuery 但有人可以解释为什么函数后面是 (jQuery, window, document);
【问题讨论】:
标签: javascript jquery
我有以下插件:
;(function($, window, document)
{
...
...
})(jQuery, window, document);
我能理解 ;是为了并且也意识到 $ 是 jQuery 但有人可以解释为什么函数后面是 (jQuery, window, document);
【问题讨论】:
标签: javascript jquery
它被称为“自我调用”或“立即调用”功能。这意味着该函数在使用最后一组括号中的参数创建后立即运行。
【讨论】:
这称为立即调用函数表达式或自执行匿名函数。它使开发人员能够隐藏他的私有声明。
;( // <---------------+
// | encapsulate the function
function($, window, document) { // <--+ declare | and call it passing three
// | anonymous | arguments.
} // <--+ function |
// |
)(jQuery, window, document); // <---------------+
【讨论】:
我不确定我是否完全理解您的要求,但他们所做的是将jQuery 对象、window 对象和document 对象传递给函数。
他们很可能出于性能原因这样做。这使得最小化器可以将所有对window 和document 的引用缩短为w 和d,因为它是局部变量。在大型库中,这可以节省几个字节。
此外,我相信 (没有参考 atm) 与全局变量相比,访问局部变量会稍微快一些(虽然实际上是一个微优化)。
【讨论】:
这是Immediately-Invoked Function Expression
这意味着,该函数被立即声明并执行。这样做是为了创建一个新的范围。
【讨论】:
这是一个立即调用的匿名函数(所谓的 IIFE)。
jQuery 的传递将其别名为 $、window 和 document,因此他们可以确定引用是外部环境中的正确版本。
【讨论】: