我应该取消绑定事件监听器以防止内存泄漏吗?

时间:2013-02-22 08:26:32

标签: javascript jquery memory memory-management memory-leaks

这是我的代码:

// array of image data
var images = [
   {
      url: 'image.jpg'
   }
];

// function that loads image
var loadImage = function(imageObject) {
    imageObject.img = $('<img src="'+imageObject.url+'"/>').error(function() {
       // error event handler, that might not always fire
       imageObject.img.remove();
       imageObject.notLoaded = true;
    });
};

loadImage(images[0]);

我的问题是如何清理图像阵列?如果我分配    images = null;,这会为所有图像清理内存吗?我应该取消绑定'错误'处理程序吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

与C / C ++(和其他)不同,JavaScript负责内存管理和垃圾收集。当然,删除不必要的数据会释放浏览器/服务器使用的一些资源,并可能略微提高整体性能,但这不是义务,如果你忘了它就不会有内存泄漏。

要清理阵列,您可以设置images.length = 0images将是一个空数组[]

答案 1 :(得分:0)

我可能已经太迟了,但我自己也偶然发现了这个问题。 @oleq的回复是正确的,但只有这是Vanilla JS。

jQuery 1.x将所有事件保存在jQuery.cache对象中,因此您需要取消绑定它,将其从那里删除。