我有一个for循环运行一个超时函数,需要动态数字,但我得到的最终结果,而不是在某些情况下的增量。For循环与动态数字超时
这里是我的代码(PS是的,我知道,设置“开始”变量在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,并在函数reloadXMLDoc为c时调用下一次迭代alled。 – epascarello 2013-04-29 17:16:32
这不是一个坏主意......就像在“reloadXMLDoc”函数的末尾,setTimeout函数调用自己?我可以在函数内添加一个计数,并继续执行setTimeout调用回相同的函数,直到计数达到50.这是否会创建任何调用函数的“问题/错误”?如果我通过计数函数避免了明显的无限循环。 – 2013-04-29 20:49:28