为什么我必须使用窗口。前缀在这里?

时间:2014-01-28 11:53:50

标签: javascript module scope global

为什么这样做有效:

FOO = window.FOO || {isFoo: true};

但这不是:

FOO = FOO || {isFoo: true};

由于FOO和window.FOO都引用相同的东西(两者都在全局范围内运行)。

1 个答案:

答案 0 :(得分:4)

因为未声明FOO,但window是。{1}}。尝试访问未声明的变量将抛出ReferenceError,但访问未定义的属性则不会。

您可以使用typeof

来解决这个问题
FOO = typeof FOO != 'undefined' ? FOO : {isFoo: true};