var a = function(){
var i = 0;
return function(){
++i;
}
}()
a();//1
a();//2
var b = function(){
var i = 0;
return ++i;
}
b();//1
b();//1对于第一个, i 由于被闭包引用所以没被回收,这是可以理解的。但是,对于第二个例子,我们不用闭包的时候之所以i每次都为0是因为每次都运行了var i= 0,这跟回收没关系吧?那怎么理解“函数运行完后变量就被回收”这句话呢?我们定义一个全局变量:var grobal = 10; 它为什么没被回收?
3 回答
minip
TA贡献10条经验 获得超0个赞
我的理解是
1、全局变量 grobal 挂在全局对象上,除非你的全局对象销毁,否则不会被回收(比如关闭浏览器窗口)
2、函数执行后,如果没有使用闭包的话,它的生命周期应该就结束了,变量就被回收,使用了闭包的话, 函数的局部变量 能被内层的 函数作用域 持有访问 所以没有被回收( js 的作用域一般是静态的,i 的值查询 应该是先从 最里层作用域开始,没有的话再向上一级作用域中查找 )
添加回答
举报
0/150
提交
取消