闭包

作者: 天上月丶 | 来源:发表于2018-04-13 17:20 被阅读19次
    var a=function(){var i=0;return function(){return i++}};
    var bb=a();
    bb();//0
    bb();//1
    bb();//2
    
    image.png

    如图所示,红色为a,黄色为b,紫色为c。

    在b中,函数c为返回值,bb=a()中,bb得到的返回值其实是一个函数,则bb()执行的时候,执行的是函数c的值,bb=a()时,产生b的活动对象,bb()执行的时候,产生一个c的活动对象,加上全局的一个活动对象,此时,有三个活动对象存在,所以bb()执行的时候,i并未被回收。

    闭包其实实质上是阻断了js的垃圾回收机制,
    js的垃圾回收在两个地方执行,一是函数运行之后回收,二是隔一段时间检查是否有需要待回收的垃圾。

    所以,若要使闭包被回收,则将bb=null即可。

    相关文章

      网友评论

        本文标题:闭包

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