接上一篇,jquery源码的这种写法叫做匿名函数自执行
(function( window, undefined ) {
// code
})( window );
函数定义了两个参数window和undefined,执行函数传入了window对象。
参数window
因为变量对象的作用域链的关系,我们知道即使不传入window对象,函数内部也是可以访问到它的,那么,这里传入window对象的意义主要有两点:
1.提高性能
按照变量对象的作用域链顺序,函数会先在内部查找window变量,而函数内部最开始包含的变量就是arguments对象,也就是参数变量,同时函数内部的代码量又是比较庞大的,如果都没找到,就会继续查找包含(外部)环境,这里即全局环境中的window对象。
这里直接传入window对象,减少了查询时间,提高了效率。
2.方便压缩
(function( e, undefined ) {
// code
})( window );
查看压缩版本的JQ源码,看到匿名函数中的window都被替换成了e,这样减少了字符数,进一步缩小了文件体积。
而如果没有使用这个参数的话,window就不能换成其他的标识符,那样访问的就不是外部环境中的window对象了。
参数undefined
全局环境window对象中有一个属性undefined,它的值是"undefined",并且无法更改。
但是在有些浏览器中却不是这样,比如ie7、ie8,用户能够修改它值。
所以,为了防止undefined的值被意外修改,就又定义了一个参数undefined且执行时没有传这个参数。
好了,这篇就到这里了。