我们一直在使用这种方法:
(function (window) {
var document = window.document,
location = window.location,
navigator = window.navigator;
})(window)
在研究上面的代码片段时,我想知道为什么像window
这样的全局可访问对象作为参数传递给函数。可能是那样:
您怎么看?
答案 0 :(得分:4)
它使代码更具可移植性。
您可以将代码复制并粘贴到未定义全局窗口对象的环境(例如节点),但与代码中关注的所有内容API兼容。然后你只需要修改传递给函数的参数。
稍微修改一下,使代码更清晰:
(function(root){
var document = root.document,
location = root.location,
navigator = root.navigator;
})(window)
答案 1 :(得分:2)
我知道您询问的代码有几个可能的原因:
在局部变量中创建document
,location
和navigator
的快捷方式可能会略微提升性能并减少输入。
将window
传递给自执行函数可能会导致对window
的引用比在全局空间中使用它稍微好一点。
javascript(不是在浏览器中)有一些执行环境,其中全局对象不被称为window
,因此代码可以更容易地适应它。但是,这个原因似乎有点可行,因为为浏览器编写的代码很可能仍然使用其他浏览器功能。
答案 2 :(得分:0)
(function ($) { }(jQuery)); // $ stands for jQuery within this function
(function (window) { }(window)); // window still equals window
(function (bananas) { }(document)); // all references to bananas => document. (silly)