【发布时间】:2016-09-01 19:09:51
【问题描述】:
这段代码导致浏览器内存泄漏是否正确?
/**
* @param {Canvas2DRenderingContext} ctx
* @param {string} url
*/
function loadImageDrawIntoCanvas(ctx, x, y, url) {
var img = new Image();
img.onload = function() {
ctx.drawImage(img, x, y);
}
img.src = url;
};
我的理解是,因为 img 是一个 DOM 元素,并且因为我使用 img.onload 将 JavaScript 附加到它,所以浏览器永远不会垃圾收集它。要更正这一点,我需要清除 img.onload,如
/**
* @param {Canvas2DRenderingContext} ctx
* @param {string} url
*/
function loadImageDrawIntoCanvas(ctx, x, y, url) {
var img = new Image();
img.onload = function() {
ctx.drawImage(img, x, y);
img.onload = null; // detach the javascript from the Image
img = null; // needed also so the closure doesn't keep
// a reference to the Image?
}
img.src = url;
};
【问题讨论】:
标签: javascript html memory-leaks