我對這個語法之間的區別感到困惑:遞歸調用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對不起,我會刪除我的評論。 –