使用 JavaScript 闭包很容易在不知不觉间造成内存泄漏。请看下面的例子:
let outer = function() {
let name = 'Jake';
return function() {
return name;
};
};
调用 outer()会导致分配给 name 的内存被泄漏。以上代码执行后创建了一个内部闭包,只要返回
的函数存在就不能清理 name,因为闭包一直在引用着它。假如 name 的内容很大(不止是一个小字符
串),那可能就是个大问题了。
书上的一段话
本身如果返回的函数一直在使用的话,name是必须要一直存在的,
那这个内存为什么会泄漏。
返回的函数本身就需要name的变量存在啊,
内存泄漏指分配了内存但始终不释放,跟你是有意的还是无意的无关。
你这里虽然是故意的,但它看起来就是分配了堆内存给
name
但始终释放不掉。但因为 JS 里没有手动释放内存的方式,所以谈内存泄漏就离不开 GC。
所以实际上闭包会不会造成内存泄漏要看 GC 机制,低版本 IE 可能会有这个问题,Chrome V8 又不傻,对此早有优化,是否存在内存泄漏还是要结合 Profiling 看才行。