在node中几乎所有变量都是局部变量,在node使用闭包,是否会被gc回收掉,哪些情况下才导致使用闭包内存不会被gc回收释放,之前写代码并没有太注意,线上项目是通过设置内存阀值来重启应用.
像这个例子
let fn = function () {
let a = 1
return function () {
return a
}
// a=null
}
let t=fn()
console.log(t())
外部可以拿到a值,调用t()后a是否会gc回收?
在node中几乎所有变量都是局部变量,在node使用闭包,是否会被gc回收掉,哪些情况下才导致使用闭包内存不会被gc回收释放,之前写代码并没有太注意,线上项目是通过设置内存阀值来重启应用.
像这个例子
let fn = function () {
let a = 1
return function () {
return a
}
// a=null
}
let t=fn()
console.log(t())
外部可以拿到a值,调用t()后a是否会gc回收?
闭包一般不会造成内存泄漏,但是需要注意的是:
1.请勿在闭包中进行循环引用,这样会造成比较严重的内存泄漏。
2.关于函数中调用的定时器,在不使用时,需要及时清除掉。
3.尽量不要使用全局变量定义闭包的引用,因为全局变量仅会在页面刷新时被回收【除非手动清除】;
4.为了避免闭包的内存泄漏,最好在函数引用的变量不被使用时,给其赋值为null[指向空],这样内存将会被回收;
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
如果之后不可能再访问到t就能把a释放(不是不访问,是访问不到)