function addHandler() {
var el = document.getElementById('el');
el.onclick = function() {
this.style.backgroundColor = 'red';
}
}
上面的代码包含在Mozilla blog post on JavaScript中,并声明上述代码会导致内存泄漏。JavaScript内存泄漏说明
有人能解释它比:
由于厄尔尼诺参考无意中陷入了匿名内部函数创建关闭。这会在JavaScript对象(函数)和本机对象(el)之间创建循环引用。
谢谢!
答案是,当它们被创建时,所有关闭都会保持与父母的链接。因此'onclick'的闭包引用'el',它又引用'el'? – tgandrews 2012-02-09 09:05:38
在你的问题代码,onclick函数有一个链接到其父,因此有权访问'el'变量。在函数内部,'el'变量等同于'this',因此你有一个小圆圈。 – japrescott 2012-02-09 09:13:16