为什么Javascript setTimeout函数的行为类似于setInterval?
作为练习的一部分,我编写了一个简单的函数来显示“二进制时钟”,一个每两秒“滴答”一次的时钟,而不是一秒。我编写的函数实际上是对HTML表单中类似代码的修改(表单中的值会一次又一次地更改) 以下是我仅对JS的修改:为什么Javascript setTimeout函数的行为类似于setInterval?,javascript,timer,clock,Javascript,Timer,Clock,作为练习的一部分,我编写了一个简单的函数来显示“二进制时钟”,一个每两秒“滴答”一次的时钟,而不是一秒。我编写的函数实际上是对HTML表单中类似代码的修改(表单中的值会一次又一次地更改) 以下是我仅对JS的修改: function binaryClock() { let currentTime = new Date(); let hr = currentTime.getHours(); let mn = currentTim
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一样
我的意思是,如果我改用
setInterval()
,我会得到完全相同的结果,作为初学者,我仍然没有足够的知识来解释为什么在这种特殊情况下,setTimeout()
(通常运行一次)会像setInterval()一样工作
在本例中,我认为在这里提问是非常重要的,因为我在研究中从未遇到过这样的差异。它的工作原理类似于设置间隔,因为您在每个刻度上都执行设置超时(binaryClick,2000)
因此,基本上,每次时钟“滴答”时,它都会启动下一个滴答“为什么我的Javascript setTimeout函数的行为类似于setInterval?”
因为你已经做到了。您正在递归调用函数
binaryClock()
。多亏了deceze的评论,我知道我错过了原始代码中递归的实现。现在,我通过setTimeout()或setInterval内的调用了解了函数每次运行时的调用:
每次勾选时都会调用它,但只会在2秒钟内生效,因为函数本身可能会以任何一种方式递归调用,这是由于语言通常的解释方式
因此,无论采用哪种方式,都可以通过递归实现类似setInterval()的行为。每次调用
binaryClock
时,都会设置set
超时,它调用binaryClock
…哪个设置s一个超时
调用二进制时钟
…哪个设置s一个超时
调用二进制时钟
…哪个设置s一个超时
调用二进制时钟
…哪个set
s aTimeout
调用binaryClock
…我现在理解了递归性,当我看到一个函数包含对自身的调用时,我会调用递归行为。