以下两个javascript代码有什么区别?

时间:2013-08-27 02:53:55

标签: javascript function

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

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

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

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

上述两个代码之间有什么区别。哪种方式更好,为什么?

3 个答案:

答案 0 :(得分:4)

我能想到的两个原因:

1)局部变量是范围链中的第一个,因此它们的访问速度比全局快(我的意思更快,意味着更快)

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

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

)(window, document);

答案 1 :(得分:4)

  

上述两个代码之间有什么区别。哪种方式更好,为什么?

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

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

此外,它允许通过模拟版本交换真实window的灵活性;这在测试期间以及在某些对象不可用且必须更换的某些环境中非常有用。

顺便说一下,你可以传递另一种论点,即undefined;它是这样的:

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

您实际上没有将任何内容传递给外部函数,这样做可以确保undefined没有被篡改;像我这样迂腐的人只会void 0为此目的:)

答案 2 :(得分:-1)

区别在于多态:在第一种情况下,您可以传递任何一对行为windowdocument对象的对象(至少对于函数调用的方法),并且该功能也适用于他们。

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