XMLHttpRequest对象垃圾回收
XMLHttpRequest对象
function getData(){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = handler;
xmlhttp.open(method, url, async);
xmlhttp.send(data);
}
XMLHttpRequest对象的5种状态
UNSET
(数字值为 0)
对象已创建。
OPENED
(数字值为 1)
open()
方法已经成功调用。在此期间可以使用 setRequestHeader()
方法来设置请求头,并且可以调用 send()
方法来请求。
HEADERS_RECEIVED
(数字值为 2)
所有的重定向都已经跳转(如果有的话),并且已经接收到了所有的HTTP响应头。
LOADING
(数字值为 3)
响应的主体部分正在接收。
DONE
(数字值为 4)
数据传输已经完成或者传输过程中出现错误(例如无限重定向)。
初始的 XMLHttpRequest
对象为UNSET状态。
send()
标志表示 send()
方法已经被调用。它初始状态不被设置,在 OPENED状态期间被调用。
XMLHttpRequest对象垃圾回收
不能被垃圾回收情况:
(1)如果 XMLHttpRequest
对象的状态是 OPENED并且已设置标识。
(2)状态是HEADERS_RECEIVED
(3)状态是LOADING且对以下事件注册了一个以上的事件监听: readystatechange
、progress
、about
、error
、load
、timeout
、loadend。
如果 XMLHttpRequest
对象在连接尚存打开时被垃圾回收机制回收了,用户代理必须终止请求。
XMLHttpRequest对象设置为未被引用
所以xmlhttp设置为null时,即不指向XMLHttpRequest对象时,XMLHttpRequest对象可能不能被垃圾回收,仍然可正常处理事件,如readystatechange事件。
参考:
[1]https://www.w3.org/html/ig/zh/wiki/XMLHttpRequest