为什么我在这里要使用window.前缀?

3

为什么这个能够工作:

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

但是这个不行:
FOO = FOO || {isFoo: true};

因为FOO和window.FOO引用的是相同的东西(两者都在全局作用域中运行)。


1
https://dev59.com/PnE85IYBdhLWcg3w430X - Bartłomiej Szypelow
1个回答

4

由于FOO未被声明,但是window已经声明。试图访问未声明的变量会抛出ReferenceError,但是访问未定义的属性不会。

您可以通过使用typeof来避免这个问题:

FOO = typeof FOO != 'undefined' ? FOO : {isFoo: true};

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