For循环在超时时间内具有动态数字

For Loop with dynamic numbers in timeout

本文关键字:动态 数字 时间 循环 超时 For      更新时间:2023-09-26

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

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

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"来修复它。然而,当我尝试:

let new_answer_start = new_answer_start + 50;

我开始得到NaN(不是数字)错误。我认为超时会以秒(10,20,30等)增加而不是发送给函数的变量是奇怪的。我假设这是因为一旦函数在10秒后开始运行,变量增量就完成了。那么我如何将"固定"号码发送到函数?

在这里做了类似问题的研究之后,我也试着把数字放进一个闭包:

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

但是这仍然从2500开始输出

尝试使用实际的闭包:

setTimeout((function (new_answer_start) {
    return function () {
        reloadXMLDoc(xmlurl, new_answer_start);
    };
})(new_answer_start), seconds);
window.new_answer_start = 0;
var interval = setInterval(function() {
    window.new_answer_start = window.new_answer_start + 50;
}, 10000);