我使用JavaScript和JQuery創建了一個倒計時「Pomodoro」計時器。我所指的代碼片段如下:當()包含在調用中時,JavaScript遞歸函數中斷
var time = 1500;
var cycle = "long";
var tracker = 0;
var paused = false;
//Timer countdown function
function countdown(){
if (!paused) {
var seconds = ("00" + (time % 60)).slice(-2);
$("#time").text(Math.floor(time/60) + ":" + seconds);
$("title").text(Math.floor(time/60) + ":" + seconds);
if (time > 0){
time--;
setTimeout(countdown, 1000);
//Once the time is up, determine cycle, play chime and reset timer.
} else {
document.getElementById("bell").play();
tracker++;
if (tracker == 7) {
cycle = "long";
time = 1500;
setTimeout(countdown, 1000);
} else if (tracker == 8) {
time = 1500;
setTimeout(countdown, 1000);
tracker = 0;
} else if (cycle == "short" && tracker < 7) {
cycle = "long";
time = 1500;
setTimeout(countdown, 1000);
} else if (cycle == "long" && tracker < 7) {
cycle = "short";
time = 300;
setTimeout(countdown, 1000);
}
}
} else {
setTimeout(countdown, 1);
}
}
setTimeout(countdown(), 1000);
該函數調用「setTimeout(countdown,1000);」位於if語句的「else」部分內部會導致程序中斷,如下所示:「setTimeout(countdown(),1000);」,因爲我相信函數通常應該被調用。我完全對此感到困惑,並非常感謝有人提供解釋。
問題:如果在「倒計時」一詞後添加「()」,程序爲什麼會中斷?
'setTimeout'以一個參數作爲參數。所以,我認爲'setTimeout(countdown,1000);'是正確的。 :) –
就像@DavinTryon說的那樣,它需要一個函數。 'countdown()'是執行倒計數功能的語句。如果你想這樣做,你需要將其包裝在一個匿名函數中,即。 '函數(){倒計時()}'。而且,儘管這個問題的措詞,它顯然是重複的。 – Rooster
休息是什麼意思? – RobertoNovelo