我使用下面的代碼在Javascript中創建倒計時。 n是重複次數,freq是執行前等待的毫秒數,funN是每次迭代調用的函數(通常是更新DOM的一部分的函數),funDone是倒數時調用的函數做完了。事件發生n次的最佳方式?
function timer(n, freq, funN, funDone)
{
if(n == 0){
funDone();
}else{
setTimeout(function(){funN(n-1); timer(n-1, freq, funN, funDone);}, freq);
}
}
它可以被稱爲像這樣:
timer(10,
1000, /* 1 second */
function(n){console.log("(A) Counting: "+n);},
function() {console.log("(A) Done!");}
);
timer(10,
500,
function(n){console.log("(B) Counting: "+n);},
function() {console.log("(B) Done!");}
);
這樣做的好處是,我可以調用計時器(),因爲我想盡可能多的時間,而不必擔心全局變量等是否有更好的如何做到這一點?是否有一個乾淨的方法來使setInterval在一定次數的調用之後停止(不使用全局變量)?這段代碼還創建了一個新的lambda函數,每次調用setTimeout時,似乎它可能會對大倒計數產生問題(我不確定JavaScript的垃圾收集器如何處理這個問題)。
有沒有更好的方法來做到這一點?謝謝。
這可能是一個好主意,問問題並用自己的方法回答。作爲練習剩下的onComplete回調函數 – Artelius 2009-01-02 04:59:07