我需要做几个GET请求,我需要每次都以不同的方式定义回调函数。我正在这样做,像这样:
for (var j = 0; j < n; j++) {
let url = "http...";
httpGetAsync(url, function (responseText) {
// do things with j
});
}
但当它进入&#34;用j&#34;行j总是n,即它在循环的最后一次迭代中具有的值。我想回调函数在循环完成所有迭代后运行,并且它们采用当时的j。
但为什么呢?不应该每次使用不同的j来定义回调函数吗?这些函数不应该在定义时使用j的值吗?
我是否需要将回调函数放入闭包中?
我很确定这是跟踪范围的问题,但如果您需要httpGetAsync功能,它看起来像这样:
function httpGetAsync(theUrl, callback)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}