js内存泄漏的一个问题

使用 JavaScript 闭包很容易在不知不觉间造成内存泄漏。请看下面的例子:

let outer = function() { 
 let name = 'Jake'; 
 return function() { 
   return name; 
 }; 
}; 

调用 outer()会导致分配给 name 的内存被泄漏。以上代码执行后创建了一个内部闭包,只要返回
的函数存在就不能清理 name,因为闭包一直在引用着它。假如 name 的内容很大(不止是一个小字符
串),那可能就是个大问题了。

书上的一段话

本身如果返回的函数一直在使用的话,name是必须要一直存在的,
那这个内存为什么会泄漏。
返回的函数本身就需要name的变量存在啊,

阅读 1.3k
1 个回答

内存泄漏指分配了内存但始终不释放,跟你是有意的还是无意的无关。

A memory leak occurs when a process allocates memory from the paged or nonpaged pools, but does not free the memory.

你这里虽然是故意的,但它看起来就是分配了堆内存给 name 但始终释放不掉。

但因为 JS 里没有手动释放内存的方式,所以谈内存泄漏就离不开 GC。

所以实际上闭包会不会造成内存泄漏要看 GC 机制,低版本 IE 可能会有这个问题,Chrome V8 又不傻,对此早有优化,是否存在内存泄漏还是要结合 Profiling 看才行。

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