美文网首页
JS闭包理解

JS闭包理解

作者: xiaoguo16 | 来源:发表于2017-08-21 10:12 被阅读0次

举一个例子来说明闭包:

function A(){
  var a=0;
  function B(){
      a=a+1;
      console.log(a); 
}
return B;
}
var m=A();
var n=m();

上述代码中每次执行m(),a的值都会加1。

例子的原理

因为上述代码中当执行A()的时候,此时执行环境为函数A的函数执行环境,作用域链的最前端为A的活动对象,然后是全局变量对象。当函数A执行完毕后,本应该销毁A的活动对象,但因为返回结果为B,也就是此时全局变量m中保存的是函数B,所以把函数B带入了全局环境中,但是B的作用域链需要引用A,所以A的活动对象并没有销毁。当在全局中执行B时,此时的作用域链依次为B的活动对象,A的活动对象,全局活动对象。

闭包的神奇之处:

外层的函数执行后,本应该销毁作用域,并且JS的垃圾回收机制将其内存空间进行回收,但是闭包阻止了这件事。因为内层的函数在其词法作用域以外的地方被执行,而其内层函数又需要引用外层函数的作用域,所以外层函数执行后,并没有销毁作用域,垃圾回收机制也没有对内存空间进行回收。

相关文章

  • 一分钟理解js闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 一分钟带你弄懂闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 什么是闭包?几分钟告诉你

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 一分钟带你弄懂闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • JS闭包入门

    最近有看到朋友的面经里提到的JS闭包的问题,就想研究研究,以下是我对JS闭包的简单理解。 到底什么是JS闭包? 定...

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • JS闭包理解

    闭包的概念 闭包就是能够读取其他函数内部变量的函数。 一、变量的作用域 要理解闭包,首先必须理解Javascrip...

  • js闭包理解

    什么是闭包简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数。 为什么需要闭包...

  • JS闭包理解

    举一个例子来说明闭包: 上述代码中每次执行m(),a的值都会加1。 例子的原理 因为上述代码中当执行A()的时候,...

  • 理解js闭包

    如果你学JavaScript已经有一段时间了,你一定听过js闭包。这也是前端面试非常喜欢问的问题,所以理解js闭包...

网友评论

      本文标题:JS闭包理解

      本文链接:https://www.haomeiwen.com/subject/qpcrrxtx.html