2014-01-09 51 views
-1

我已經運行了一些Javascript命名空間定義。我有點困惑。我對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

可能重複[?什麼是 「無功FOO = FOO || {}」 的意思是在Javascript(http://stackoverflow.com/questions/6439579/what-does-var -foo-foo的均值,中的JavaScript) – deceze

回答

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/

1

[] VS {}只是使用數組VS對象作爲命名空間。前者通常會工作,但幾乎總是錯的;它使用數組原型屬性污染了名稱空間。 ({}與對象原型屬性的做法相同,但是這些屬性的數量要少得多 - 並且它們不太可能具有所需的名稱。)

0

要回答你的第二個問題,這個包含在圓括號中的函數是一個自我執行的函數。你可以閱讀關於它here

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();