在JavaScript中创建全局对象时,为什么需要指定this关键字

时间:2012-03-29 12:24:44

标签: javascript

假设我正在尝试创建一个全局变量x,如果它还不存在:

x = x || {};            //This fails. x is not defined
this.x = this.x || {};  //But this works

我在Firebug中运行它并且对第一行失败感到惊讶。我希望x被附加到全局窗口对象,但除非我指定this,否则它不起作用。

我希望提高对语言的理解。有人能解释一下为什么会这样吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  • 如果您尝试在表达式的一部分中使用未声明的变量,则会引发ReferenceError抛出。

  • 如果您尝试分配未声明的变量,则该变量将被声明为隐式全局变量。隐含的全局变量很糟糕。

x = x || {};  
    ^  its this x that breaks it.

要正确检查是否声明了变量,您应该使用typeof variable === "undefined"检查。

未定义的属性(在第二个示例中,xthis上的属性),默认情况下保留值undefined