为什么未定义的全局变量抛出异常但是通过窗口访问不?

时间:2018-04-09 13:14:15

标签: javascript

行为

我有一个名为InfoPanel的全局变量。如果我在InfoPanel时尝试通过undefined引用它,则会因未定义而引发未捕获的引用错误。但是,如果我通过window.InfoPanel引用它,则会按预期返回undefined

问题

为什么InfoPanel !== undefined抛出异常但window.InfoPanel !== undefined按预期工作?

对于那些要求代码的人:https://jsfiddle.net/Angryr/w27ezsb3/

1 个答案:

答案 0 :(得分:1)

那是因为当您尝试全局访问InfoPanel时,它会尝试查找不存在的变量。所以它会抛出异常。

执行window.InfoPanel时,它正在尝试访问对象属性(InfoPanel对象的window属性)。

第二种形式不会引发异常。