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

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

(function ( window, undefined) { /* ...jquery code... */ }) (window); 

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

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

此外,它看起来像该函数被用作运算符? 就像它在上面一样,我根本不理解语句的语法。 也许有背景会有所帮助?

包装器做了很多事情:

 function(window,undefined) 

为函数提供windowundefined变量

匿名电话})(window); 将窗口变量传递给脚本。

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

 (function(window,undefined){})(w); 

缺少传递的第二个参数undefined变量设置为undefined值,这会阻止程序员通过覆盖undefined来搞乱jQuery。