如果我使用Dojo创建事件侦听器并调用.remove()
,则不会看到侦听器的数量下降(如Chrome DevTools“性能”标签所报告的那样)。
示例代码:(您可以将其粘贴到Dojo website上的JavaScript控制台中进行尝试!)
dojo_on = require("dojo/on");
function makeHandlers(n) {
var handlers = [];
for (var i = 0; i < n; i++) {
handlers.push(dojo_on(document.body, 'click', () => console.log('boo')));
}
return handlers;
}
function removeAll(handlers) {
handlers.forEach(x => x.remove());
}
运行handlers = makeHandlers(1000)
,我可以观察到处理程序数量增加。调用removeAll(handlers)
,我可以看到(通过单击文档)事件处理程序不再触发,但是侦听器的数量没有减少,如以下屏幕快照所示:
我做错什么了吗?我是通过这些监听器泄漏内存吗?