或許,該代碼是應該固定在其中$
,window
或document
已陰影與其他值的情況下:
(function() {
var window = 123,
document = 'abc',
$ = Function.prototype;
})();
然後,
$
由jQuery
使用的速記和其他圖書館。該代碼假定jQuery
未被其他事物遮蔽,因此它會創建一個名爲$
的變量,其值爲jQuery
。
this
是一個關鍵字。如果未以非嚴格模式顯式設置,則它將成爲全局對象。所以你的代碼創建了一個帶有該值的局部變量window
。請注意,這是危險的,因爲this
可能已設置爲某個值,或者在嚴格模式下爲undefined
。
- 假設
this
是全局對象,this.document
將是文檔對象。
undefined
是全局對象的一個屬性,它沒有ECMAScript 3中的ReadOnly屬性,所以它可以被覆蓋。你的代碼創建一個局部變量而不分配任何值,所以它變成了真正的未定義的。這是ECMAScript 5以來不再需要的,因爲window.undefined
的[[Configurable]]和[[Writable]]屬性設置爲false
。
然後,
(function() {
var window = 123,
document = 'abc',
$ = Function.prototype;
(function($, window, document, undefined) {
// `$`, `window`, `document` and `undefined` have been restored
})(jQuery, this, this.document);
})();
@ ZachLeighton,這個問題有點令人困惑,但我認爲喬治詢問關於jquery文件加載的問題 –
我不明白爲什麼它必須通過this和this.document,以及'undefined' –
@NathanKoop很好抓,我很快看了一眼,看到了分號就是這樣。 –