匿名函数与闭包的区别

转载 2017年01月03日 11:43:53

匿名函数:没有函数名称的函数;

这就是匿名函数:

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对闭包的解析;

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

匿名函数和闭包的区别

不少编程人员分不清匿名函数和闭包总是把他们俩搞混  在这之前我也是对这云里雾里的 匿名函数:简单的来说就是没有名字的函数 匿名函数有两种方式定义 第一种方式: var double =...
  • xiaoerduo123x
  • xiaoerduo123x
  • 2016-11-22 21:10:24
  • 899

js中的匿名函数和闭包总结篇

匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。一.匿名函数//普通函数 function box() { //函数名是box ...
  • u012896140
  • u012896140
  • 2015-10-29 17:50:33
  • 1486

匿名函数与闭包(closure)

该函数所在的区域一般来说,一个function在return之后,
  • xixiaoming_A
  • xixiaoming_A
  • 2014-07-10 19:02:39
  • 1136

匿名函数与闭包的区别

匿名函数与闭包的区别 匿名函数:没有函数名称的函数; 这就是匿名函数:function(argument1,argument2){ } 闭包:一个可以使用另外一个函数作用域中的变量的函数。 如下...
  • zengyonglan
  • zengyonglan
  • 2016-12-02 15:21:17
  • 160

关于javascript的闭包和匿名函数

javascript的闭包和匿名函数
  • csdn_haow
  • csdn_haow
  • 2016-09-15 22:20:51
  • 187

浅析匿名函数、lambda表达式、闭包(closure)区别与作用

浅析匿名函数、lambda表达式、闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11、python和java中有lambda表达式、lua和JavaScript...
  • guyue35
  • guyue35
  • 2016-07-18 17:38:02
  • 718

【JavaScript】匿名函数和闭包

一、 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。    1、普通函数: function box() { //函数名是 box return 'Lee'; }    2...
  • tengliu6
  • tengliu6
  • 2016-09-18 10:15:55
  • 490

JS之匿名函数与闭包

匿名函数是指没有指定函数名称的函数,先来看下面的例子:想想看结果是什么?var a = function(t) { return t; } (1 + 2).toString(); alert(a); ...
  • kkdelta
  • kkdelta
  • 2013-01-07 16:37:19
  • 8437

匿名函数和闭包

    匿名函数是指函数定义时不指定名称的函数。    闭包是指有权访问另一个函数作用域的函数。而常见的闭包定义方式就是在一个函数内部再创建一个函数。 如下的红色字体就是一个闭包,当然它也是一个匿名函...
  • a909039663
  • a909039663
  • 2018-04-17 18:28:39
  • 6
收藏助手
不良信息举报
您举报文章:匿名函数与闭包的区别
举报原因:
原因补充:

(最多只允许输入30个字)