JavaScript 递归函数在调用中包含 () 时中断
JavaScript recursive function breaks when () included in call
我使用 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);",因为我认为通常应该调用函数。 我对此感到非常困惑,如果有人愿意提供解释,我将不胜感激。
问:如果在"倒计时"一词后添加"()",为什么程序会中断?
如果你写下setTimeout(countdown(), 1000);
,基本上当该代码块被评估时,JS会立即调用countdown()
。通过执行setTimeout(countdown, 1000);
,您将对函数countdown
的引用作为第一个参数传递,因此,根据第二个参数(1000
),直到1秒后才会执行。
这是一个语法问题。在javascript中,你不会在函数的括号中传递,只传递函数的名称。请参阅此帖子。
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 货币代码为欧元-金额的格式不应包含小数
- 如何包含特定于每个视图angularjs的javascript文件
- 我如何修复包含在captcha的addthis中的错误
- 正在注入包含JS的HTML
- Json数据包含日期和时间格式
- Angular js-返回一个包含类似
- jQuery/JS包含运算符或类似运算符
- 如果href包含X,请更改href
- JavaScript数组包含一个值
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 高亮显示与数组字符串一起使用时文本插件中断
- 包含数组的对象的QML ListModel追加中断
- 当jQuery ajax请求中包含#时,URL中断
- 我的“if”语句中包含中断的错误(wrox ch 3 练习 4)
- if语句中的中断语句,该语句包含在嵌套的for循环中
- 包含照片幻灯片的 iframe 会在 Chrome 上中断
- 当字符串包含方括号时,RegEx中断
- jqueryui中的长行可排序(包含)中断了排序
- JavaScript 递归函数在调用中包含 () 时中断