哪些如下之间的差异:差异
方法1:
(function($, window, document, undefined) {
.......
})(jQuery, window, document);
方法2:
(function($, window, document, undefined) {
.......
})();
哪些如下之间的差异:差异
方法1:
(function($, window, document, undefined) {
.......
})(jQuery, window, document);
方法2:
(function($, window, document, undefined) {
.......
})();
在这两个函数中,th ERE将是局部变量$
,window
,document
和undefined
中的第一个功能,将他们拥有的价值观传递(除undefined
,这将是不确定的)。
在第二个函数中,它们将是未定义的(并且仍然使用相同的名称来掩盖全局变量)。
你的问题与你给出的代码示例没有任何意义。情理之中的事情虽然是
(function($, window, document, undefined) {
$("#foo").something();
document.createElement("bar");
// ..
})($, window, document);
与
(function() {
$("#foo").something();
document.createElement("bar");
// ..
})();
在第二个功能,当$
,window
,document
进行访问,这些标识符的第一查找发生在功能范围 - 和自他们没有在那里找到,JS引擎不得不在链中查看“进一步”,看它是否在那里找到那些标识符的对象。当然会发现它们(假设这里jQuery可以通过$
对象得到) - window
是全局对象,$
是window
和document
之外的对象。
现在,在第一个函数中,这些对象作为参数传递到函数中,因此它们可以在函数作用域内直接访问 - 引擎不必在此范围之外继续搜索它们,这些标识符可以在那里解决。
这是一种优化技术,用于加快这些标识符的查找时间。尽管如此,它是微型优化 - 所以在大多数情况下,不会有明显的甚至可测量的差异。尽管如此,这种模式已经相当普遍。