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

在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回收?

阅读 2.2k
4 个回答

如果之后不可能再访问到t就能把a释放(不是不访问,是访问不到)

{
let fn = function () {
  let a = 1
  return function () {
      return a
  }
//  a=null
}
let t=fn()
console.log(t())
}
console.log(typeof t);//从这里开始就访问不到t了,所以从这里之后js引擎会在合适的时机回收a

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

不会,用闭包的目的就是为了不让它被回收啊

以你的例子 t如果是在别的函数里面 那就执行完了回收 如果是全局作用域那就不会回收了 是个变量可见性的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题