我一直在尋找的jQuery的代碼在過去的版本,並且似乎在每一個版本they have this line of code內某處:什麼是做window.undefined =點window.undefined
window.undefined = window.undefined;
我不能看看爲什麼這個重要,更重要的是,這是做什麼的。這好像是將undefined
指定爲undefined
,這對我來說毫無意義。
但是,這似乎很重要,我很好奇。
我一直在尋找的jQuery的代碼在過去的版本,並且似乎在每一個版本they have this line of code內某處:什麼是做window.undefined =點window.undefined
window.undefined = window.undefined;
我不能看看爲什麼這個重要,更重要的是,這是做什麼的。這好像是將undefined
指定爲undefined
,這對我來說毫無意義。
但是,這似乎很重要,我很好奇。
window.undefined
並不總是存在,因此像if (foo === undefined)
這樣的代碼會在舊版瀏覽器中引發ReferenceError,因爲undefined
未定義(即未聲明)。此代碼只是確保undefined
被定義(未定義)。
雖然這是不必要的,因爲有很多方法可以在沒有同名全局屬性的情況下獲得值undefined
。例如,你可以寫if (foo === void 0)
甚至像if (foo === [][0])
。
Later versions似乎認爲window.undefined
存在於所有支持的瀏覽器中。該most recent versions使用這樣的模式:
(function(window, undefined) {
...
})(window);
注意,沒有值傳遞爲undefined
,所以它保證被聲明爲一個局部變量,並有undefined
值。
全局'undefined'變量在EcmaScript 3(§15.1.1.3)中被指定。瀏覽器是否沒有實現這一點,或者是否有早期版本沒有指定這個?哪些舊瀏覽器沒有全局的'undefined'變量? – Bergi
@Bergi IIRC這是一箇舊的IE的東西。我現在試圖找到這方面的一些證據,但無法挖掘這些舊瀏覽器的信息。不過,我確實還記得幾年前遇到過這種情況。 –
@Bergi我剛剛檢查了版本2,它似乎沒有在那裏指定。 IE在完全採用ES3方面遠遠落後於此,所以我懷疑它是他們。 –
使用這個,jQuery定義了一個全局變量,其值爲undefined
。具有類似於myvar
一個全局變量是指您在window
範圍有這個變量(如window.mywar
),如果你運行這段代碼在窗口範圍:
var myvar = "whatever";
JavaScript的定義你的變量,如果你有這條命令:
window.myvar = "whatever";
假設我們沒有一個全局變量像myundefined
這意味着window.myundefined
不存在,window.myundefined
沒有價值,這意味着window.myundefined
是真的undefined
,那麼你可以創建一個全局variab樂在窗口範圍內這樣的命名undefined
:
window.undefined = window.myundefined
這行有完全相同的結果爲你上面提到的jQuery代碼。換句話說jQuery的可以做同樣的與此代碼:
window.undefined = window.myundefined
或
window.undefined = window.whatever_you_want_with_no_value
這些定義都沒有值的全局變量。
[通過jQuery核心源代碼中的未定義參數](http://stackoverflow.com/a/5395329/901048) – Blazemonger
@Blazemonger不,我不這麼認爲。 –
我認爲他們只是確保未定義的財產將存在。如果不是,則創建 –