2013-04-29 94 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