如何理解闭包和垃圾回收机制?
最近有读到关于垃圾回收机制和闭包的文章,但是对于他们的理解还是不深刻,存在一些疑惑,希望有大佬可以给予解答
我的理解是局部变量在函数执行完成之后就被回收,而全局变量不会被回收直到窗口关闭(是因为全局变量的生命周期?)
那么函数声明会被回收吗?回收只回收变量?下面的例子:
function a(){
var i = 1;
function b(){
return i
}
return b
}
var x = a();
x()
在执行x()后,函数a以及内部的变量i和函数b会被回收?
闭包的另一个作用是常驻内存,例:
for(var i = 0; i< 9; i++){
(function(i){
setTimeout(function(){
console.log(i)
},1000)
})(i)
}
这个例子是将变量i保存在匿名函数中,那么函数执行完之后i会被回收吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
内存管理-标记-清除算法部分
function fun () {}; fun = {};
则原本属于函数部分的内存被回收。x= a()
后 x即为内部的函数 b,函数 b内部引用 i,则 b、i都不会被回收, 执行x()
后,x 仍全局保持对 b 的引用,b、i 不会被回收。同理,执行结束后 i,仍可全局的 i 仍可获取,所以全局的 i 并不会被销毁。