事实证明,有一个类似的问题,What does “options = options || {}” mean in Javascript?,但这个问题很普遍 - 我特别询问Javascript文件顶部发生了这样的声明 。我已经明白,如果尚未定义foo
,那么它将使用空对象进行初始化。同样,我的问题特别询问这种用法作为Javascript文件顶部的第一个语句。为什么会这样做?要防止对象被先前加载的文件中的赋值覆盖?在我发现的情况下,之前没有加载文件 - 因此我的问题是:
问题:以下语句中window.foo
的重点是什么,这是Javascript文件顶部的第一个语句 (即相反)只是说foo = {};
)?
foo = window.foo || {};
请注意,文件中的后续行定义了属性和方法:
foo.one = 'one';
foo.two = function() {
return 1+1;
}
它们用作foo.one;
和foo.two();
(后续)问题2 :与定义以下相同的内容相比,上述方法的优势(以及术语的差异)是什么:
var one = 'one';
function two() {
return 1+1;
}
它们用作one;
和two();
此外,上述所有内容也可通过window
访问:window.foo.one;
和window.one;
以及window.foo.two();
和window.two();
。
(后续)问题3 :我在最外层范围内定义的所有内容都绑定到window
?那是什么意思呢? (即如果它不是什么?)
答案 0 :(得分:-1)
第一个问题:如果已有foo
个对象,则不会覆盖该对象。
第二个问题:如果你把东西放到foo
而不是制作新符号,你就可以避免污染命名空间。
第三个问题:是的。如果您在浏览器中运行。这被称为“全球范围”。它必须去某个地方,对吧?如果你不想要这个,你必须创建一个新的范围(通过一个函数),或者做一个命名空间(就像你的foo
一样)。