我应该使用self或window来引用全局范围吗?

时间:2012-06-22 18:24:35

标签: javascript coding-style web-worker

作为一种样式约定,当我在全局范围内访问变量时,我喜欢明确,更喜欢

window.example = "Hello";
window.alert(window.example);

到较不详细的

example = "Hello";
alert(example);

我现在有一个可以直接从浏览器使用的模块,或者,如果它们可用,则来自Web工作者。在Web worker中,全局对象称为self,而在浏览器中称为window

window对象具有自我属性,因此self.example = "Hello"可以在两种情况下都有效,只要没有人重新声明self(正如他们经常做的那样:var self = this )。

最好的约定是什么?

  • 使用self并希望没有人声明有冲突的self
  • 如果定义了window,请使用window,否则请使用self
  • 别的什么?

考虑到这一点后,我倾向于选择第二个。

3 个答案:

答案 0 :(得分:7)

在全局范围内,无论是在页面还是Web工作者中,您都可以编写如下代码:

(function( global ) {
  // ... whatever
}( this );

然后在主外部函数中你可以使用“global”(或称之为“window”或“self”或“whatever”),它可以在任何一个上下文中工作(或者在Node.js中工作)。

答案 1 :(得分:1)

我建议

var global; try { global = window } catch(e) { global = self }

答案 2 :(得分:0)

您可以创建自己对窗口或自我的引用:

var my_window = window || self;