//自调用匿名函数
(function( window, undefined ) {
// jquery code
})(window);
1.结构:
在第一个括号内,创建一个匿名函数;第二个括号,立即执行
2.创建自调用匿名函数的原因:
通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突
匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法(注意标红了的右括号):
(function() { console.info( this ); console.info( arguments ); }( window ) ); | (function() { console.info( this ); console.info( arguments ); })( window ); |
通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:
(function(a,b){})(window); // window 被优化为 a |
在 自调用匿名函数 的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值
undefined = "now it's defined";
alert( undefined );
浏览器测试结果:
浏览器 | 测试结果 | 结论 |
ie | now it's defined | 可以改变 |
firefox | undefined | 不能改变 |
chrome | now it's defined | 可以改变 |
opera | now it's defined | 可以改变 |