我遇到过一些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);
})();
请告知
答案 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();