0

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

这是我的代码(ps是的,我意识到在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 秒增加一次函数将以等于 50 的增量运行 new_answer_start。相反,我每 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 开始输出。

4

2 回答 2

0

尝试使用实际的闭包:

setTimeout((function (new_answer_start) {
    return function () {
        reloadXMLDoc(xmlurl, new_answer_start);
    };
})(new_answer_start), seconds);
于 2013-04-29T17:17:51.930 回答
-1
window.new_answer_start = 0;
var interval = setInterval(function() {
    window.new_answer_start = window.new_answer_start + 50;
}, 10000);
于 2013-04-29T17:20:05.267 回答