打开jQuery源码,首先你会看到这样的代码结构:jquery
(function(window,undefined){ //jquery code })(window);
这是一个自调用匿名函数。在第一个括号内,建立一个匿名函数;第二个括号内,当即执行框架
经过定义一个匿名函数,建立了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点很是有用也是一个js框架必须支持的功能,jQuery被应用在成千上万的JavaSctipt程序中,必须确保jQuery建立的变量不能和导入他的程序所使用的变量发生冲突函数
传入window:由于执行js代码是从里到外的,经过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不须要将做用域链回退到顶层做用域,这样能够更快的访问window;更重要的是,将window做为参数传入,能够在压缩代码时进行优化,例如jQuery-1.6.1.min.js:
(function(a,b){})(window);//window被优化为a
优化
(1)Javascript 中的 undefined 并非做为关键字,所以能够容许用户对其赋值,例如IE8:code
var undefined = 'change' ;(function(window) { alert(undefined);//IE8 'change' })(window)(2)行参undefined是局部的,因此就算在外部定义了undefined,里面的undefine依然不受影响。这样子最大程度防止外界的变量定义对内部形成影响ip