猿问

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

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

慕慕森

如果之后不可能再访问到t就能把a释放(不是不访问,是访问不到){letfn=function(){leta=1returnfunction(){returna}//a=null}lett=fn()console.log(t())}console.log(typeoft);//从这里开始就访问不到t了,所以从这里之后js引擎会在合适的时机回收a

炎炎设计

闭包一般不会造成内存泄漏,但是需要注意的是:1.请勿在闭包中进行循环引用,这样会造成比较严重的内存泄漏。2.关于函数中调用的定时器,在不使用时,需要及时清除掉。3.尽量不要使用全局变量定义闭包的引用,因为全局变量仅会在页面刷新时被回收【除非手动清除】;4.为了避免闭包的内存泄漏,最好在函数引用的变量不被使用时,给其赋值为null[指向空],这样内存将会被回收;
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答