函数调用时绑定和非绑定参数之间的差异

时间:2014-02-06 07:40:58

标签: javascript jquery

以下有何不同之处:

方法1:

(function( $, window, document, undefined ) {
.......
})( jQuery, window, document );

方法2:

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

2 个答案:

答案 0 :(得分:0)

在这两个函数中,$windowdocumentundefined

都会有局部变量

在第一个函数中,它们将具有传入的值(undefined除外,这将是未定义的)。

在第二个函数中,它们将是未定义的(并且仍然使用相同的名称屏蔽全局变量)。

答案 1 :(得分:0)

对于您提供的代码示例,您的问题毫无意义。但有意义的是

(function( $, window, document, undefined ) {
  $("#foo").something();
  document.createElement("bar");
  // ..
})( $, window, document );

VS

(function() {
  $("#foo").something();
  document.createElement("bar");
  // ..
})();

在第二个函数中,当访问$windowdocument时,这些标识符的第一次查找发生在函数范围内 - 因为在那里找不到它们, JS引擎必须在链中“进一步向上”以查看它是否在那里找到那些标识符的对象。它当然会找到它们(我们假设这里jQuery是通过$对象提供的) - window是全局对象,$window下的对象,并且document也存在于函数之外。

现在,在第一个函数中,这些对象作为参数传递给函数,因此它们可以直接在函数范围内访问 - 引擎不必在此范围之外继续搜索它们,这些标识符可以在那里得到解决。

这是一种优化技术,可加快这些标识符的查找时间。它虽然是微优化 - 所以在大多数情况下,没有明显的甚至可衡量的差异。然而,这种模式已经变得非常普遍。