码迷,mamicode.com
首页 > 其他好文 > 详细

自执行匿名函数剖析

时间:2015-11-18 12:39:12      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

引入

在很多js代码中我们常常会看见这样一种写法:

(function( window, undefined ) {
    // code
})(window);

这种写法我们称之为自执行匿名函数self-executing anonymous function)。

正如它的名字一样,它是自己执行自己的,前一个括号是一个匿名函数,后一个括号代表立即执行。

 

 


 

函数和函数表达式的区别

  • 语法
function keqing(){   //函数
    alert(‘Hi~‘);  
}

var keqing = function(){ //函数表达式
  alert(‘Hi~‘)
}
  • 函数的函数声明有一个重要特征 —— 函数声明提升 
keqing();   //Hi~
function keqing(){
  alert(‘Hi~‘);
}

函数:在读取执行代码之前会先读取函数声明

 

keqing();  // Uncaught TypeError: keqing is not a function
var keqing = function(){
  alert(‘Hi~‘);
}

函数表达式:没有函数声明提升,在执行前必须先赋值
  • 回到我们的自执行匿名函数
function(){
   alert(‘aaaa‘);  
}()  //出错,因为这是一个匿名函数,函数后不能跟圆括号


---------------> 函数声明想要变成函数表达式,就需要给它加一个圆括号

(function(){
  alert(‘aaaa‘);
})() // aaaa 这样就变成了自执行匿名函数

 

 


 

自执行匿名函数剖析

回到我们最开始的栗子,

(function( window, undefined ) {
    // code
})(window);

 

1.自执行匿名函数写法的好处:防止变量名冲突

2.自执行匿名函数的其他多种写法:

( function() {}() );
( function() {} )();
[ function() {}() ];

~ function() {}();
! function() {}();
+ function() {}();
- function() {}();

var f = function() {}();

//当然不需要都记住,会用就OK。还有很多不常见的我就不一一举例了..

3.为何要传入window?

这样传入window可将其从全局变量变为局部变量,在函数作用域内可以直接访问到window,就不用将作用域链退回到顶层作用域了。

在压缩代码时,可以对window进行优化。

4.为何要增加参数undefined?

由于undefined在一些情况下有可能会被重写,为确保在自执行匿名函数里的undefined是"真的undefined",就需要增加参数undefined。

 


 

 

因为这个经常在工作和面试中出现,所以我就结合《js高级程序设计》小小滴总结了一下,感觉印象更深刻,了解更透彻了,希望对大家能有所帮助!

 

自执行匿名函数剖析

标签:

原文地址:http://www.cnblogs.com/cheerful-queen/p/4973882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!