我使用 JavaScript 和 JQuery 创建了一个倒计时“番茄工作法”定时器。下面是相关的代码片段:
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);
在if语句的“else”部分中,函数调用“setTimeout(countdown, 1000);”会导致程序中断,如果按照以下方式编写:“setTimeout(countdown(), 1000);”,我认为应该正常调用函数。我对此完全感到困惑,非常希望有人能够提供解释。
问题: 如果在单词“countdown”后面添加“()”,为什么程序会中断?
setTimeout
接受一个函数作为参数。所以,我认为setTimeout(countdown, 1000);
是正确的。 :) - Davin Tryoncountdown()
是执行函数倒计时的语句。如果你想这么做,你需要将其包装在匿名函数中,即function(){countdown()}
。此外,尽管此问题的措辞如此,但显然是一个重复的问题。 - Rooster