匿名函数与闭包的区别

匿名函数与闭包的区别

匿名函数:没有函数名称的函数;
这就是匿名函数:

function(argument1,argument2){
}

闭包:一个可以使用另外一个函数作用域中的变量的函数。

如下面的代码函数b就是闭包,但是这个前提是:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。

意思是说b要变成闭包的话,就必须被外包所引用,即c引用:

<script type="text/javascript">
function a(){
   var i=1;
   function b(){
       ++i;
      return i;
   }
  return b;
}
var c=a();
alert(c());
</script>

专业一点的说法就是:函数调用返回后一个没有释放资源的栈区;

一般,当函数执行完毕后,局部活动对象会被销毁,内存中仅保存全局作用域,但闭包的情况是不一样的。闭包的活动对象依然会保存在内存中,于是像上例中,函数调用返回后,变量i是属于活动对象里面的,就是说其栈区还没有释放,但你调用c()的时候i变量保存的作用域链从b()->a()->全局去寻找作用域var i声明所在,然后找到了var i=1;然后在闭包内++i;结果,最后输出的值就是2了;不知道这么说有没人明白,如果不明白,那么只要记住它的闭包的两个点就好了,一点就是闭包的活动对象没有被销毁;第二点是作用域链的关键是他要遇到var 声明;就好了····

共同点:他们都有是函数;除此之外没有任何共同点;

下面是,阮一峰
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?20120612141317#comments对闭包的解析;

闭包会携带它的函数的作用域,因此会比其他函数占用更多的内存,所以使用闭包要非常注意!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值