在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=1returnfunction(){returna}//a=null}lett=fn()console.log(t())}console.log(typeoft);//从这里开始就访问不到t了,所以从这里之后js引擎会在合适的时机回收a
炎炎设计
TA贡献1808条经验 获得超4个赞
闭包一般不会造成内存泄漏,但是需要注意的是:1.请勿在闭包中进行循环引用,这样会造成比较严重的内存泄漏。2.关于函数中调用的定时器,在不使用时,需要及时清除掉。3.尽量不要使用全局变量定义闭包的引用,因为全局变量仅会在页面刷新时被回收【除非手动清除】;4.为了避免闭包的内存泄漏,最好在函数引用的变量不被使用时,给其赋值为null[指向空],这样内存将会被回收;
添加回答
举报
0/150
提交
取消