【发布时间】:2013-04-23 11:05:03
【问题描述】:
我有一个 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 开始输出。
【问题讨论】:
-
大部分开发者只会运行一次settimeout,并在调用reloadXMLDoc函数时调用下一次迭代。
-
这不是一个坏主意......就像在“reloadXMLDoc”函数的末尾,setTimeout 函数回调到自身?我可以在函数中添加一个计数,并继续执行 setTimeout 回调到同一个函数,直到计数达到 50。这是否会创建任何“问题/错误”调用该函数本身?如果我用计数函数避免了明显的无限循环。
标签: javascript variables dynamic for-loop settimeout