function addHandler( )
{
var el = document.getElementById('el');
el.onclick = function( )
{
this.style.backgroundColor = 'red';
};
}
为什么上面的JavaScript块存在泄漏?
答案 0 :(得分:1)
在今天的浏览器中没有内存泄漏。但是,在较旧的IE版本中,此代码确实产生了泄漏。
如果垃圾回收器无法删除对象,则会发生内存泄漏,因为它仍然在某处被引用。早期的垃圾收集器存在循环引用的问题,即当对象A引用对象B时,反之亦然。
旧的IE版本就是这种情况:el
有一个对函数的引用,因为函数被设置为onclick
属性的值(应该是显而易见的)。
但该函数还引用了el
,因为它是一个关闭el
的闭包。这是循环参考。
答案 1 :(得分:0)
代码中唯一分配内存的是你附加到点击事件的新功能。
没有内存泄漏,但是如果动态创建数百万个元素,它可能会导致高内存使用,并为每个元素调用此函数。
否则,此功能不会导致内存泄漏。