或许,该代码是应该固定在其中$
,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很好抓,我很快看了一眼,看到了分号就是这样。 –