为什么在这个JavaScript中有内存泄漏?
Why is there a memory leak in this JavaScript?
function addHandler( )
{
var el = document.getElementById('el');
el.onclick = function( )
{
this.style.backgroundColor = 'red';
};
}
为什么上面的JavaScript块有泄漏?
在今天的浏览器中没有内存泄漏。但是,在较旧的IE版本中,此代码确实会产生泄漏。
如果垃圾收集器无法删除对象,因为它仍然在某处被引用,则会发生内存泄漏。早期的垃圾收集器在循环引用方面存在问题,即当对象A引用对象B时,反之亦然。
在旧的IE版本中就是这种情况:el
有一个对函数的引用,因为该函数被设置为onclick
属性的值(这应该是显而易见的)。
但是这个函数也有对el
的引用,因为它是对el
闭合的闭包。这是循环引用
代码中唯一分配内存的是附加到on click事件的新函数。
没有内存泄漏,但是如果动态创建数百万个元素,并为每个元素调用此函数,则可能导致高内存占用。
相关文章:
- 重复应用 d3 转换导致的内存泄漏
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- jQuery Draggable:内存泄漏
- "检测到可能的EventEmitter内存泄漏”;使用Gulp+Watchify+Factor捆绑包
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 是内存泄漏
- 将处理程序留在img.onload上是内存泄漏
- 具有并发sse连接的node.js内存泄漏
- 简单对象的Javascript内存泄漏
- WeakMap是否会将我从父/子关系的内存泄漏中拯救出来
- Javascript绘制画布内存泄漏
- Node.js”;检测到EventEmitter内存泄漏”;
- 正在清理内存泄漏
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- Angular JS$编译服务导致$watch内存泄漏
- 如何防止和防范闭包内存泄漏
- 跟踪 JavaScript 内存泄漏的工具
- 页面刷新后javascript内存泄漏有问题吗?为什么?
- XMLHttpRequest循环内存泄漏