我有一些关于javascript命名空间的问题

时间:2014-01-09 16:28:32

标签: javascript javascript-namespaces

我遇到过一些Javascript名称空间定义。我有点困惑。

以下命名空间定义是否正确?

 var googletag = googletag || {};

所以当你最后添加一个方括号时,这是什么意思?

 googletag.cmd = googletag.cmd || [];

当您在命名空间后定义了一个函数时,这是什么意思?

var ctvAdManager = ctvAdManager || {};

(function () {
    var gads = document.createElement('script');
    gads.async = true;
    gads.type = 'text/javascript';
    var useSSL = 'https:' == document.location.protocol;
    gads.src = (useSSL ? 'https:' : 'http:') +
        '//www.googletagservices.com/tag/js/gpt.js';
    var node = document.getElementsByTagName('script')[0];
    node.parentNode.insertBefore(gads, node);
})();

请告知

4 个答案:

答案 0 :(得分:1)

[] vs {}只使用数组与对象作为命名空间。前者经常会奏效,但几乎总是错的;它使用Array原型属性污染命名空间。 ({}对Object原型属性执行相同的操作,但是这些属性的数量要少得多 - 而且它们不太可能具有所需的名称。)

答案 1 :(得分:1)

这是速记OR表示法。用英语

var googletag = googletag || {};

表示:“设置googletag等于googletag,但如果未定义,则将googletag设置为空对象。

[]是相同的,只是一个空数组而不是一个对象。

您使用的功能表示法

(function() { ... })(); is called an `Immediately Invoked Function Expression`.

我发现这个网站解释得很好。 http://benalman.com/news/2010/11/immediately-invoked-function-expression/

答案 2 :(得分:0)

要回答第二个问题,括在括号中的这个函数是一个自动执行的函数。你可以阅读它here

答案 3 :(得分:0)

var googletag = googletag || {};将获得googletag的值,或者,如果未定义googletag,则将获取空对象。

与第二个相同,但不是对象,而是回退到空数组。

对于函数:
var foo = 5;
foo == 5 && doSomething(); // is the same thing as if (foo == 5) doSomething(); foo == 5 || doSomething(); // is the same thing as if (foo != 5) doSomething();