有什么意义的`foo = window.foo || {};`在Javascript文件的顶部?

时间:2014-06-04 23:08:06

标签: javascript

事实证明,有一个类似的问题,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?那是什么意思呢? (即如果它不是什么?)

1 个答案:

答案 0 :(得分:-1)

第一个问题:如果已有foo个对象,则不会覆盖该对象。

第二个问题:如果你把东西放到foo而不是制作新符号,你就可以避免污染命名空间。

第三个问题:是的。如果您在浏览器中运行。这被称为“全球范围”。它必须去某个地方,对吧?如果你不想要这个,你必须创建一个新的范围(通过一个函数),或者做一个命名空间(就像你的foo一样)。