我读到了关于循环引用在IE中如何导致内存泄漏的文章,但是有一个使用闭包嵌套打破循环引用的例子让我感到困惑:
function addHandler() {
var clickHandler = function() {
this.style.backgroundColor = 'red';
};
(function() {
var el = document.getElementById('el');
el.onclick = clickHandler;
})();
}
我的头脑混乱,不知道哪些是引用,哪些是闭包,哪些是作用域对象。谁能比 MDN 更明确地解释一下?谢谢。
clickHandler
中没有明确引用el
,el
仍然存在于clickHandler
的作用域对象中?这意味着,即使clickHandler
可以 引用el
,clickHandler
也可以通过显式或隐式引用访问el
引用?从而在clickHandler
的作用域对象和el
的对象之间创建了循环引用?我只是想确保,在clickHandler
中的this
语句没有导致对el
的循环引用,而是作用域对象进行了该引用。 - Tri Noensiethis
无关。当一个函数被创建时,它也会获得对所创建的“作用域”的引用,即它隐式地引用了在其创建范围内也可访问的所有变量。这导致IE出现问题。 - Felix Kling