自调用匿名函数 self-invoking anonymous function

自调用匿名函数 self-invoking anonymous function

(function( window, undefined ) {

    // jquery code

})(window);

1.这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行

2.为什么要创建这样一个“自调用匿名函数”呢?

通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。

3.匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法(注意标红了的右括号):

(function() {

    console.info( this );

    console.info( arguments );

 }( window ) 
);

(function() {

    console.info( this );

    console.info( arguments );

 }
)( window );

4.为什么要传入window呢?

通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:

 

(function(a,b){})(window); // window 被优化为 a   

5.为什么要在在参数列表中增加undefined呢?

在 自调用匿名函数 的作用域内,确保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

  可以改变


 6. 注意到源码最后的分号了吗?

分号是可选的,但省略分号并不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号并养成习惯。

 

 

你可能感兴趣的:(自调用匿名函数 self-invoking anonymous function)