我有这段代码重写了 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);
}
在这种情况下,事件监听器会堆积起来还是会被垃圾收集?如果没有,我将如何实现这一目标?
最佳答案
每次调用 XHR.send() 时,都会创建新函数作为事件监听器。但如果您需要在处理程序内部使用闭包(即访问 self 变量),这是唯一的方法。
当您使用它时,您应该确保清除存储对 XHR 的引用的每个属性,以使垃圾收集正确地从内存中清除处理程序。
var XHR = new XMLHttpRequest();
//...
XHR.send(...);
//...
XHR = null; //not needed anymore - make sure GC can remove its handlers
关于javascript - 重写 XMLHttpRequest 的发送函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787844/