为了账号安全,请及时绑定邮箱和手机立即绑定

有一个关于变量回收的问题,请教各位大神,谢谢

有一个关于变量回收的问题,请教各位大神,谢谢

慕田峪8701529 2018-05-21 00:15:19
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 的值查询 应该是先从 最里层作用域开始,没有的话再向上一级作用域中查找  )


查看完整回答
反对 回复 2018-05-21
  • 3 回答
  • 0 关注
  • 1471 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信