7

在一些使用即时函数的 Javascript 代码中,它具有参数windowdocument如下所示:

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

但是,windowanddocument是全局对象,可以直接访问如下:

(function () {
  var userAgent = window.navigator.userAgent;
  ...
  var el = document.getElementById(...)
  ...
})();

以上两个代码有什么区别。哪种方法更好,为什么?

4

3 回答 3

4

我能想到的两个原因:

1)局部变量是作用域链中的第一个,因此它们的访问速度比全局变量快(更快我的意思是快得微不足道)

2)在函数内部,windowdocument是局部变量,所以它们的名字可以最小化:

(function (w, d) {
//var userAgent = w.navigator.userAgent;

)(window, document);
于 2013-08-27T02:58:07.837 回答
4

以上两个代码有什么区别。哪种方法更好,为什么?

仅在浏览器中的所有实用性和使用中,没有明显的区别。

也就是说,引用局部变量而不是全局变量会带来非常轻微的性能提升。

window此外,它还允许通过模拟版本灵活地替换真实版本;这在测试期间和某些对象不可用且必须更换的某些环境中可能很有用。

顺便说一句,您可以通过另一种论点,即undefined; 它是这样的:

(function(undefined) {
    // your code
}());

你实际上并没有将任何东西传递给外部函数,这样做可以确保它undefined没有被篡改;像我这样迂腐的人只是void 0为了这个目的:)

于 2013-08-27T03:11:29.123 回答
-1

区别在于多态性:在第一种情况下,您可以向函数传递任何行为为window和 对象的document对象(至少对于您的函数调用的方法),并且该函数也可以与它们一起使用。

在实践中,特别是这两个对象,任何好处都更容易出错 - 每个人都期望window并且document Javascript 定义的windowdocument但从理论上讲,这就是收益。

于 2013-08-27T02:58:34.387 回答