2013-04-29 93 views
0

我有一个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

+1

大多数开发人员只会运行一个settimeout,并在函数reloadXMLDoc为c时调用下一次迭代alled。 – epascarello 2013-04-29 17:16:32

+0

这不是一个坏主意......就像在“reloadXMLDoc”函数的末尾,setTimeout函数调用自己?我可以在函数内添加一个计数,并继续执行setTimeout调用回相同的函数,直到计数达到50.这是否会创建任何调用函数的“问题/错误”?如果我通过计数函数避免了明显的无限循环。 – 2013-04-29 20:49:28

回答

0

输出尝试使用的实际关闭:

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

我假设在“reloadXMLDoc(xmlurl,new_answer_start;”你的意思是:“reloadXMLDoc(xmlurl,new_answer_start)”? – 2013-04-29 20:58:53

+0

@JonCole当然,我做了,愚蠢的我:) – Ian 2013-04-29 20:59:33

+0

谢谢!在我解决了“拼写错误”之后,这个工作非常完美,正是我所期待的。显然,我需要了解关闭的更好... – 2013-04-29 21:04:11

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

你应该可以解释一下。 – pilsetnieks 2013-04-29 17:37:48

+0

我知道如何使它成为一个全局变量,窗口​​前缀“might”可以工作。然而,这现在创建了一个我真的不想要的时间间隔。我不想继续运行我的“reloadXMLDoc”函数。我只是希望能够根据其他一些标准运行它〜20-50次,并且我需要每次都将增加的“new_answer_start”变量传递给该函数,并且它需要从主函数延迟。 – 2013-04-29 20:53:52