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

Tags
javascript
Created
Jun 24, 2015 3:21 AM

一个函数没有执行, 那么内存存的只是最外层函数(对象)的引用;只要没有执行,代码里面有什么根本不用在乎。

闭包很容易发生无意识的内存泄露(循环引用,以前的问题,现在用标记清楚算法。via: MDN)。如下所示:

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

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

可以使用 this。

SuperMade with Super