使用 window 对象

4

我看到很多人在调用变量时使用了window.。但其实所有同一窗口的变量都在window中吗?
例如:

window.onorientationchange = function() {
  var orientation = window.orientation; // <-- WHY?
  switch(orientation) {
    /* ... */
  }
}

但是同样的人使用alert()document等。为什么呢?

2个回答

3

有时候,您只想将某些函数/变量作为显式属性暴露在window中。

(function() {
   var jQuery = function(selector) { alert( selector ) }
})();

jQuery // not defined

如果我们将其修改为:
(function() {
   var jQuery = function(selector) { alert( selector ) }
   window.jQuery = jQuery;
})();

然后我们需要明确地从私有命名空间中“暴露”它。

是的,您不必显式声明window.来调用诸如alert之类的方法,但每个人都有自己的编码风格和自己的语句明确度。

有些人会将window.前缀显示添加到全局方法(如alert)中,以避免任何混淆。假设您在私有命名空间中定义了一个名为alert的函数,例如......

(function() {
   function alert() {}
   alert('lol'); // does nothing
   window.alert('lol') // does something
})();

在私有命名空间中,我们不能使用alert来进行警告,因为我们定义了一个同名的函数。我们必须显式引用window.alert方法来解决这个问题。

但是一般情况下,如果您不将私有命名空间中的东西公开到全局命名空间中,那么没有必要在前面加上window.前缀。因此,请根据您的需要在代码中使用documentalert等内容。


0
在很多 JavaScript 教程中,alert()、document() 等等函数都会被使用,而且它们不会完整地限定 window 对象,我认为这只是在重复代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接