4

我在浏览器控制台中尝试了一些 javascript,但不确定为什么这不起作用。在我的尝试中,控制台和 jsfiddle 中的以下代码引发了错误:未捕获的ReferenceError: foo is not defined

foo = foo || {}; 

我对此的解释是:如果全局对象(在本例中为窗口)的 foo 不存在,则将其创建为空对象。

或者,代码window.foo = window.foo || {};像我期望的那样工作。预先给 foo with 赋值foo = 'bar'可以使原始语句在之后运行时也能正常工作。

4

1 回答 1

9

您必须先检查是否foo已定义:

foo = typeof foo !== 'undefined' ? foo : {};

这可能有点不直观,但是未定义和具有值undefinedwindow.foowindow没有foo属性时返回)之间存在差异。

更好的方法是添加var关键字:

var foo = foo || {};

之所以有效,是因为 JavaScript 将变量声明提升到当前范围的顶部,声明foo并赋予其值undefined

var foo;

foo = foo || {};
于 2013-04-29T06:30:08.387 回答