以下有何不同之处:
方法1:
(function( $, window, document, undefined ) {
.......
})( jQuery, window, document );
方法2:
(function( $, window, document, undefined ) {
.......
})();
答案 0 :(得分:0)
在这两个函数中,$
,window
,document
和undefined
在第一个函数中,它们将具有传入的值(undefined
除外,这将是未定义的)。
在第二个函数中,它们将是未定义的(并且仍然使用相同的名称屏蔽全局变量)。
答案 1 :(得分:0)
对于您提供的代码示例,您的问题毫无意义。但有意义的是
(function( $, window, document, undefined ) {
$("#foo").something();
document.createElement("bar");
// ..
})( $, window, document );
VS
(function() {
$("#foo").something();
document.createElement("bar");
// ..
})();
在第二个函数中,当访问$
,window
,document
时,这些标识符的第一次查找发生在函数范围内 - 因为在那里找不到它们, JS引擎必须在链中“进一步向上”以查看它是否在那里找到那些标识符的对象。它当然会找到它们(我们假设这里jQuery是通过$
对象提供的) - window
是全局对象,$
是window
下的对象,并且document
也存在于函数之外。
现在,在第一个函数中,这些对象作为参数传递给函数,因此它们可以直接在函数范围内访问 - 引擎不必在此范围之外继续搜索它们,这些标识符可以在那里得到解决。
这是一种优化技术,可加快这些标识符的查找时间。它虽然是微优化 - 所以在大多数情况下,没有明显的甚至可衡量的差异。然而,这种模式已经变得非常普遍。