对于具有超时动态数字的循环

时间:2013-04-29 17:13:52

标签: javascript variables dynamic for-loop settimeout

我有一个运行超时函数的for循环需要动态数字,但在某些情况下我得到的是最终结果而不是增量。

这是我的代码(p.s.是的,我意识到在for循环中设置'start'变量并不理想):

var new_answer_start = 0;
var seconds = 0;
for (start=0; start<50; start++) {
    new_answer_start = new_answer_start + 50;
    seconds = seconds + 10000; //10 seconds
    setTimeout(function(){reloadXMLDoc(xmlurl, new_answer_start);},seconds);
}

我想要完成的是,每10秒增加一次,该函数将以new_answer_start等于50的增量运行。相反,我每10秒输出一次函数,每次从2500开始输出(最后一组50循环后的数字)。我以前遇到过类似的问题,与闭包有关,我用“让”来修复它。但是,当我尝试时:

let new_answer_start = new_answer_start + 50;

我开始收到NaN(不是数字)错误。我认为超时会以秒(10,20,30等)递增而不是发送给函数的变量,这很奇怪。我假设这是因为一旦函数在10秒后运行,变量增量已经完成到最后。那么如何将“固定”号发送给函数呢?

在这里对类似问题进行研究后,我也尝试将数字放入一个闭包中:

setTimeout(function(){reloadXMLDoc(xmlurl, (new_answer_start));},seconds);

但这仍然开始输出2500.

2 个答案:

答案 0 :(得分:0)

尝试使用实际的闭包:

setTimeout((function (new_answer_start) {
    return function () {
        reloadXMLDoc(xmlurl, new_answer_start);
    };
})(new_answer_start), seconds);

答案 1 :(得分:-1)

window.new_answer_start = 0;
var interval = setInterval(function() {
    window.new_answer_start = window.new_answer_start + 50;
}, 10000);