我对这个语法之间的区别感到困惑:递归调用setTimeout函数并传递一个匿名函数
var timerId;
function clockStart(){
// debugger;
if(timerId){
return;
}
update();
// THIS LINE BELOW *********************************************
var timerId = setTimeout(function(){clockStart()}, 1000);
}
function clockStop(){
timerId = null;
}
function update(){
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
if(hours < 10) {
hours = '0'+hours;
}
document.getElementById('hour').innerHTML = hours;
if(minutes < 10){
minutes = 0+minutes;
}
document.getElementById('min').innerHTML = minutes;
if(seconds < 10){
seconds = '0' + seconds;
}
document.getElementById('sec').innerHTML = seconds;
}
我公司提供的被称为两种功能,但这个功能我不明白的主要部分就是为什么我需要传递一个匿名函数来调用我的clockStart()函数。
我的功能工作时,我使用这个语法:
var timerId = setTimeout(function(){clockStart()}, 1000);
但是,当我用不工作:
var timerId = setTimeout(clockStart(), 1000);
我已经在这两个功能,我工作了一段时间老老实实偶然偶然发现了这一点。除了调用clockStart函数之外,我真的没有看到匿名函数在做什么。但在我看来,我的clockStart()函数应该每秒调用一次(1000毫秒),因为它调用自己,所以为什么它需要一个匿名函数来调用它?它不应该援引自己吗?
如果你想看到这个数字时钟的完整代码,请检查我的codepen link。
@ jfriend00对不起,我会删除我的评论。 –