我有这段代码覆盖了XMLHttpRequest的发送功能。
var sendOrig = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
var args = arguments;
var self = this;
setTimeout(function() {
// Do something.
self.addEventListener("readystatechange", function() {
if(this.readyState == 4) {
// Do something else.
}
});
sendOrig.apply(self, args);
}, 0);
}
在这种情况下,事件监听器是否堆积在一起还是收集了垃圾?如果没有,我将如何实现这一目标?
答案 0 :(得分:0)
每次调用XHR.send(),它都会创建新的函数作为事件监听器。但是如果在处理程序中需要一个闭包(即你访问自变量),这是唯一的方法。
使用它时,应确保清除存储引用XHR的每个属性,以使垃圾收集从内存中正确清除处理程序。
var XHR = new XMLHttpRequest();
//...
XHR.send(...);
//...
XHR = null; //not needed anymore - make sure GC can remove its handlers