为什么这个JavaScript中存在内存泄漏?

时间:2014-03-15 16:48:22

标签: javascript memory-leaks

function addHandler( ) 
{
    var el = document.getElementById('el');

    el.onclick = function( ) 
    {
    this.style.backgroundColor = 'red';
    };
}

为什么上面的JavaScript块存在泄漏?

2 个答案:

答案 0 :(得分:1)

在今天的浏览器中没有内存泄漏。但是,在较旧的IE版本中,此代码确实产生了泄漏。

如果垃圾回收器无法删除对象,则会发生内存泄漏,因为它仍然在某处被引用。早期的垃圾收集器存在循环引用的问题,即当对象A引用对象B时,反之亦然。

旧的IE版本就是这种情况:el有一个对函数的引用,因为函数被设置为onclick属性的值(应该是显而易见的)。
但该函数还引用了el,因为它是一个关闭el的闭包。这是循环参考。

答案 1 :(得分:0)

代码中唯一分配内存的是你附加到点击事件的新功能。

没有内存泄漏,但是如果动态创建数百万个元素,它可能会导致高内存使用,并为每个元素调用此函数。

否则,此功能不会导致内存泄漏。