我正嘗試使用JavaScript來做簡單的計時器。一切都好,但setTimeout()只是即時工作。我該如何解決它?setTimeout()在我的簡單定時器腳本中實時工作
var flag = 0;
function getTimerValue(){
var val = parseInt(document.getElementById('timer').value,10);
if (isNaN(val)) {
val = 0;
}
return val;
}
function setTimerValue(newvalue){
document.getElementById('timer').value = newvalue;
}
function runTimer(){
if (flag == 0){
flag = 1;
while (flag == 1){
x = getTimerValue()
if (x < 1){
setTimerValue(0);
flag = 0;
} else{
setTimeout(setTimerValue(x - 1), 1000);
}
}
}
}
或'的setTimeout(setTimerValue, 1000,x - 1);'除了IE 9之外,它可以在所有相同的瀏覽器中工作,[IE也很容易修復](https://developer.mozilla.org/zh-CN/docs /網絡/ API/WindowTimers/setTimeout的#IE_only_fix))。 – Paulpro
我喜歡你的表演,它只是循環忽略其他語句。 – Noqrax
@Noqrax:你似乎認爲'setTimeout'會阻塞,直到超時結束。它沒有。它稍後在JS事件循環中排隊執行該函數,並立即返回。事件循環中排隊的事件不會在其他JS代碼執行時運行;他們等待它完成。所以你只是排隊無數的事件,應該減少一個相同的計數,循環永遠不會退出,所以事件循環永遠無法發送它們中的任何一個。 – ShadowRanger