Cha*_*les 1 javascript setinterval
我读StackOverflow上的答案在这里解释了如何使用的setTimeout来创造一种在网页上反复循环。但是,我想知道为什么 setTimeout 需要匿名函数才能工作。考虑以下代码:
trainingTimer(60,0);
function trainingTimer(duration,c) {
document.getElementById("timer").innerHTML = "Time left: "+(duration-c);
if(duration==c) {
alert("Time is up!");
}
else {
window.setTimeout(trainingTimer(duration,c+1),1000);
}
}
Run Code Online (Sandbox Code Playgroud)
我是根据上面链接的答案写的,但是当它运行时,它会trainingTimer一次遍历所有 60 个调用,并立即在我的网页上显示“剩余时间:0”。但是,如果我修改
window.setTimeout(trainingTimer(duration,c+1),1000);
并trainingTimer(duration,c+1)像这样包装一个匿名函数
window.setTimeout(function() {trainingTimer(duration,c+1)},1000);
那么代码工作得很好。
我想知道为什么我必须将命名函数包装在匿名函数中才能使 setInterval 正常工作。感谢所有的帮助。
这个
window.setTimeout(trainingTimer(duration,c+1),1000);
Run Code Online (Sandbox Code Playgroud)
是相同的
var result = trainingTimer(duration,c+1);
window.setTimeout(result,1000);
Run Code Online (Sandbox Code Playgroud)
它获取执行方法的结果并分配它。
而且由于训练计时器方法不返回任何内容。你的代码基本上是这样的
trainingTimer(duration,c+1);
window.setTimeout(undefined, 1000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |