addEventListener / attachEvent是否受到内存泄漏模式的影响?

时间:2015-07-24 14:48:12

标签: javascript memory-leaks

我已经阅读了一些有关javascript内存泄漏模式的文章(例如MSDN articleIBM article)。

我理解将一个处理程序(例如onclick)属性附加到元素会因为处理程序关闭该元素而产生泄漏:

var elem = document.getElementById('foo');
elem.onclick = function () {
     // Creates leak
}

我的问题:addEventListener / attachEvent接口是否会导致同样的问题?它们的功能也不要靠近元素,并且出于同样的原因不会导致泄漏吗?

var elem = document.getElementById('foo');
elem.addEventListener('click', function () {
    // Doesn't this also close over elem?
}, false);

如果以上不会导致泄漏,为什么不呢?如果没有,那么这个代码对于attachEvent来说有什么不同,哪个MSDN说会导致泄漏(我知道attachEvent很快就会过时,但在那里提供了例子)?

function AttachEvents(element)
{
    // This structure causes element to ref ClickEventHandler
    element.attachEvent("onclick", ClickEventHandler);

    function ClickEventHandler()
    {
        // This closure refs element
    }
}

function SetupLeak()
{
    // The leak happens all at once
    AttachEvents(document.getElementById("LeakedDiv"));
}

0 个答案:

没有答案