JavaScript Window对象总是可以访问?

Chr*_*ich 10 javascript scope window

我们看到这种方法一直在使用:

(function (window) {
    var document = window.document,
        location = window.location,
        navigator = window.navigator;
})(window)
Run Code Online (Sandbox Code Playgroud)

在研究上面的代码片段时,我想知道为什么像全局可访问的对象window作为参数传递给函数.可能是这样的:

  1. 开发人员不能100%确定地知道可以从本地函数范围内访问窗口吗?
  2. 这是一种很好的做法,因为您可以向阅读代码的其他开发人员明确表达您的意图.
  3. 你已经看过John Resig这样做,所以一定是手指舔好了!

你怎么看?

Mat*_*ork 4

它使代码更加可移植。

您可以将代码复制并粘贴到未定义全局窗口对象(例如节点)的环境中,但 API 与您在代码中关心的所有内容兼容。然后你只需修改传递给函数的参数即可。

稍微修改一下,使代码更清晰:

(function(root){
    var document = root.document,
        location = root.location,
        navigator = root.navigator;
})(window)
Run Code Online (Sandbox Code Playgroud)