在jQuery中匿名函数包装器的目的是什么?

Dex*_*ter 8 javascript jquery

jQuery开始在匿名函数中包装所有代码:

(function ( window, undefined) {
   /*
   ...jquery code...
   */
}) (window);
Run Code Online (Sandbox Code Playgroud)

我知道在读取整个脚本时会立即执行该函数,但参数的目的是什么?一个是全局对象引用,另一个是属性引用.

现在,我记得在脚本开发的早期,undefined实际上被定义为其他东西(我记得是吗?).这与此有关吗?

此外,看起来该功能被用作运营商?就像它在上面一样,我根本不理解语句的语法.也许有背景会有所帮助?

zzz*_*Bov 11

包装器做了很多事情:

function(window,undefined)
Run Code Online (Sandbox Code Playgroud)

为函数提供windowundefined变量

匿名调用})(window);将窗口变量传递给脚本.

如果用户覆盖窗口对象,他们将能够轻松地修改脚本以使用正确的window变量,即:

(function(window,undefined){})(w);
Run Code Online (Sandbox Code Playgroud)

缺少传递的第二个参数会将undefined变量设置为具有undefined阻止程序员通过覆盖来破坏jQuery的值undefined.

  • 顺便提一下,ECMAScript 5指定`undefined`变量是不可变的.当然鉴于浏览器的性质,jQuery不能假设当前版本是ECMAScript 5. (3认同)