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

node应用中使用闭包在什么情况下才会真的造成内存泄漏?

node应用中使用闭包在什么情况下才会真的造成内存泄漏?

隔江千里 2019-05-11 09:03:02
在node中几乎所有变量都是局部变量,在node使用闭包,是否会被gc回收掉,哪些情况下才导致使用闭包内存不会被gc回收释放,之前写代码并没有太注意,线上项目是通过设置内存阀值来重启应用.像这个例子letfn=function(){leta=1returnfunction(){returna}//a=null}lett=fn()console.log(t())外部可以拿到a值,调用t()后a是否会gc回收?
查看完整描述

2 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如果之后不可能再访问到t就能把a释放(不是不访问,是访问不到)
{
letfn=function(){
leta=1
returnfunction(){
returna
}
//a=null
}
lett=fn()
console.log(t())
}
console.log(typeoft);//从这里开始就访问不到t了,所以从这里之后js引擎会在合适的时机回收a
                            
查看完整回答
反对 回复 2019-05-11
?
炎炎设计

TA贡献1808条经验 获得超4个赞

闭包一般不会造成内存泄漏,但是需要注意的是:1.请勿在闭包中进行循环引用,这样会造成比较严重的内存泄漏。2.关于函数中调用的定时器,在不使用时,需要及时清除掉。3.尽量不要使用全局变量定义闭包的引用,因为全局变量仅会在页面刷新时被回收【除非手动清除】;4.为了避免闭包的内存泄漏,最好在函数引用的变量不被使用时,给其赋值为null[指向空],这样内存将会被回收;
                            
查看完整回答
反对 回复 2019-05-11
  • 2 回答
  • 0 关注
  • 663 浏览
慕课专栏
更多

添加回答

举报

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