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
即可。
网友评论