2014-06-04 44 views
-1

事實證明,有一個類似的問題,What does 「options = options || {}」 mean in Javascript?,但這個問題是普遍的 - 我特別要求關於在JavaScript文件的頂部發生這樣的聲明。我已經明白,如果foo尚未定義,那麼它將用一個空對象進行初始化。同樣,我的問題特別提到了這個用法,作爲Javascript文件頂部的第一條語句。爲什麼會這樣做?爲了防止對象被之前加載的文件的賦值覆蓋?在我發現的情況下,有沒有更早加載的文件 - 因此,我的問題:`foo = window.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();

此外,上述所有的也可以訪問通過windowwindow.foo.one;window.one;window.foo.two();window.two();

(後續)問題3:我所定義的最外層範圍內的所有內容都與window相關嗎?那是什麼意思? (即,如果不是?)

+3

那麼,在第一種情況下,你有一個受控的唯一命名空間。在第二種情況下,您正在污染全球範圍,並且您可能會與其他圖書館發生衝突。 – elclanrs

+0

啊,對。污染全球範圍。 – user664833

+1

爲什麼每個問題發佈三個問題?我想你在這裏已經足夠長,知道比這更好。 –

回答

-1

第一個問題:如果已經有一個foo對象,它將不會被覆蓋。第二個問題:如果將事物放入foo而不是製作新的符號,則避免污染名稱空間。

第三個問題:是的。如果你在瀏覽器中運行。這就是所謂的「全球範圍」。它必須去某個地方,對吧?如果你不想要這個,你必須做一個新的範圍(通過函數),或者做命名空間(比如你的foo)。

+0

你不應該回答重複的問題 –

+0

只是試圖幫助(而不是害怕downvotes,我已經足夠長的時間記得當Stackoverflow是一個更友好的地方) – Thilo

+0

停止哭泣。你的前兩個答案很差。如果你要回答簡單的,基本的,常問的問題,至少應該努力做到正確。 –