JavaScript Window 对象始终可访问
JavaScript Window object always accessible?
我们看到这种方法一直在使用:
(function (window) {
var document = window.document,
location = window.location,
navigator = window.navigator;
})(window)
在研究上面的代码片段时,我想知道为什么像 window
这样的全局可访问对象作为参数传递给函数。难道是:
- 开发人员不能 100% 确定地知道窗口可以从本地函数范围内访问吗?
- 这是很好的做法,因为您可以向阅读您的代码的其他开发人员明确您的意图。
- 你已经看到约翰·雷西格这样做了,所以它一定是手指舔好的!
你觉得怎么样?
它使代码更具可移植性。
您可以将代码复制并粘贴到未定义全局窗口对象(例如节点)的环境中,但 API 与您在代码中关心的所有内容兼容。然后,您只需修改传递给函数的参数。
稍作修改,使代码更清晰:
(function(root){
var document = root.document,
location = root.location,
navigator = root.navigator;
})(window)
我知道您询问的代码有几个可能的原因:
-
在局部变量中为
document
、location
和navigator
创建快捷方式可能会稍微提高性能,并且会减少键入。 -
将
window
传递到自执行函数可能会导致对window
的引用的性能略好于从全局空间使用它。 -
对于javascript(不在浏览器中),有一些执行环境不会调用全局对象
window
因此代码可以更容易地适应它。 但是,这个原因似乎有点可行,因为为浏览器编写的代码很可能使用其他浏览器功能。
(function ($) { }(jQuery)); // $ stands for jQuery within this function
(function (window) { }(window)); // window still equals window
(function (bananas) { }(document)); // all references to bananas => document. (silly)
- 通常,顶部名称是您希望它命名的名称,而底部则确保它应该代表什么。因此,将 $ 放在顶部意味着您的所有 jQuery 代码(在本例中)都保留在 jQuery 中。将其用于窗口/窗口只是确保窗口的其他定义不会改变其作为"窗口"的原始意图。
- 这绝对是一种最佳实践,也是允许在匿名函数/命名空间中获取所需内容的受控方式。
- 原因之一!雷西格就是那个人。
相关文章:
- JavaScript Window 对象始终可访问
- 访问子窗体的asp代码隐藏中的javascript window.myvariable
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- 在setInterval中访问window.event.altkey
- 我如何在angular($window).bind()中访问它
- 如何使用window.open()快速访问我的网站的根目录
- 如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable
- 有没有办法查看 window.top 是否可以访问
- 获取错误:在 JavaScript 中的 window.open() 函数上访问被拒绝
- 如何在Aurelia中访问Window&Document对象
- Javascript - 使用 window.open();访问另一个 HTML 文件
- 无法在 window.resize() 中访问对象的上下文
- TypeError: window.parent.updatepic 不是函数,当我尝试从 iframe 访问函数到他的
- 我该如何检查我是否可以访问window.opener
- 从iFrame/Window访问JavaScript中的父对象
- 访问Selenium WebDriver中的window.external函数
- 从嵌入的iframe访问window.parent
- 设置@grant值时如何访问“window”(目标页)对象
- 允许子iframe(跨站点)访问window.top
- 使用window.moveTo时拒绝访问