我使用JavaScript和JQuery创建了一个倒计时“Pomodoro”计时器。我所指的代码片段如下:
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);”,因为我认为通常应该调用一个函数。我对此感到非常困惑,如果有人能够提供解释,我会非常感激。
问题:如果在“倒计时”一词之后添加“()”,为什么程序会中断?
答案 0 :(得分:1)
如果你写下true
,基本上在评估该代码块时,JS会立即调用setTimeout(countdown(), 1000);
。通过执行countdown()
,您将对函数setTimeout(countdown, 1000);
的引用作为第一个参数传递,因此,根据第二个参数(countdown
),它将在1秒后执行
答案 1 :(得分:0)
这是一个语法问题。在javascript中,您不会使用函数传递括号,只传递函数的名称。请参阅this post。