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