闭包很容易发生无意识的内存泄露

一个函数没有执行, 那么内存存的只是最外层函数(对象)的引用;只要没有执行,代码里面有什么根本不用在乎。
闭包很容易发生无意识的内存泄露(循环引用,以前的问题,现在用标记清楚算法。via: MDN)。如下所示:







function addHandler() {
var el = document.getElementById('el');
el.onclick = function() { el.style.backgroundColor = 'red';
}
}


这段代码创建了一个元素,当它被点击的时候变红,但同时它也会发生内存泄露。为什么?因为对 el 的引用不小心被放在一个匿名内部函数中。这就在 JavaScript 对象(这个内部函数)和本地对象之间(el)创建了一个循环引用。

可以使用 this。