作爲一個練習的一部分,我寫了一個簡單的函數來顯示一個「二進制時鐘」,這是一個每兩秒「滴答」一次而不是一次的時鐘。我寫的函數實際上是對HTML表單中的類似代碼的修改(表單中的值會一次又一次地改變)。爲什麼我的Javascript setTimeout函數的行爲像一個setInterval?
這裏是我的JS-唯一的修改:
function binaryClock() {
let currentTime = new Date();
let hr = currentTime.getHours();
let mn = currentTime.getMinutes();
let sc = currentTime.getSeconds();
setTimeout('binaryClock()', 2000);
document.body.innerHTML = '';
document.write(hr + ':' + mn + ':' + sc + ' ');
}
binaryClock();
爲什麼它的實際工作音程,因爲任何時鐘在這個意義上是將行爲setTimeout
喜歡的setInterval在binaryClock回調?我的意思是,如果我使用setInterval()
代替,我得到完全相同的結果,並且作爲初學者,我仍然沒有足夠的知識來解釋爲什麼在這種特殊情況下,setTimeout()
(通常運行一次)可以工作如setInterval()
在這種情況下,看到它足夠重要的問這裏,因爲我從來沒有在我的研究中發現這種差異。
每當你調用'binaryClock'時'Timeout'正被'set'調用'binaryClock'; ...設置'Timeout',它調用'binaryClock'; ...設置'Timeout',它調用'binaryClock'; ...設置'Timeout',它調用'binaryClock'; ...其中'設置'超時'調用'binaryClock' ... – deceze
我明白了現在的recurisivness,並會在我看到一個包含對自己的調用的函數時調用此行爲遞歸。 – sangoko