在for中定义一个函数

时间:2017-01-14 22:38:12

标签: javascript scope

我需要做几个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);
}

0 个答案:

没有答案