为什么我的 Javascript setTimeout 函数的行为类似于 setInterval?
Why does my Javascript setTimeout function behaves like a setInterval?
作为练习的一部分,我编写了一个简单的函数来显示 "binary clock",一个每两秒 "ticks" 的时钟,而不是一个。我写的函数实际上是对类似代码的修改,它以 HTML 形式(形式中的值一次又一次地更改)。
这是我的纯 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
就像 binaryClock 回调上的 setInterval 一样?
我的意思是,如果我改用 setInterval()
,我会得到完全相同的结果,作为初学者,我仍然没有足够的知识来解释为什么在这种特殊情况下,setTimeout()
(通常运行一次)在这种情况下会像 setInterval()
一样工作,并且认为它很重要,所以在这里问它,因为我在我的研究中从未遇到过这样的差异。
它的工作原理类似于 setInterval,因为您在每个滴答上都执行 setTimeout(binaryClick,2000)。
所以基本上,每次你的时钟 "ticks" 它开始下一个滴答
"Why does my Javascript setTimeout function behaves like a setInterval?"
因为你做到了。您正在递归调用函数 binaryClock()
。
感谢发表评论的 deceze,我知道我错过了原始代码中递归性的实现。我现在明白函数每次运行时都会通过调用 setTimeout() 或 setInterval:
调用自身
它在每个 tick 中被调用,而只有 2 秒生效,因为由于语言通常被解释的方式,该函数本身可以递归地递归。
因此,无论哪种方式,都可以通过递归实现类似于 setInterval() 的行为。
作为练习的一部分,我编写了一个简单的函数来显示 "binary clock",一个每两秒 "ticks" 的时钟,而不是一个。我写的函数实际上是对类似代码的修改,它以 HTML 形式(形式中的值一次又一次地更改)。
这是我的纯 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
就像 binaryClock 回调上的 setInterval 一样?
我的意思是,如果我改用 setInterval()
,我会得到完全相同的结果,作为初学者,我仍然没有足够的知识来解释为什么在这种特殊情况下,setTimeout()
(通常运行一次)在这种情况下会像 setInterval()
一样工作,并且认为它很重要,所以在这里问它,因为我在我的研究中从未遇到过这样的差异。
它的工作原理类似于 setInterval,因为您在每个滴答上都执行 setTimeout(binaryClick,2000)。
所以基本上,每次你的时钟 "ticks" 它开始下一个滴答
"Why does my Javascript setTimeout function behaves like a setInterval?"
因为你做到了。您正在递归调用函数 binaryClock()
。
感谢发表评论的 deceze,我知道我错过了原始代码中递归性的实现。我现在明白函数每次运行时都会通过调用 setTimeout() 或 setInterval:
调用自身它在每个 tick 中被调用,而只有 2 秒生效,因为由于语言通常被解释的方式,该函数本身可以递归地递归。
因此,无论哪种方式,都可以通过递归实现类似于 setInterval() 的行为。