Javascript 为什么我的1000毫秒超时函数比1秒函数花费的时间更长?

Javascript 为什么我的1000毫秒超时函数比1秒函数花费的时间更长?,javascript,Javascript,我正在编写一个Javascript计数器函数,但我不太确定 假设1000ms==1s var-ms=0; var s=0; setInterval(()=>{document.querySelector('#ms')。innerHTML=ms++},1); setInterval(()=>{document.querySelector('#s').innerHTML=s++},1000) 0 0它不是那样工作的。当您定义计时器(setTimeout或setInterval)时,JS引擎不能保证

我正在编写一个Javascript计数器函数,但我不太确定

假设1000ms==1s

var-ms=0;
var s=0;
setInterval(()=>{document.querySelector('#ms')。innerHTML=ms++},1);
setInterval(()=>{document.querySelector('#s').innerHTML=s++},1000)
0

0
它不是那样工作的。当您定义计时器(setTimeout或setInterval)时,JS引擎不能保证它将在1000毫秒内运行,因为它取决于它在队列中处理的内容

此外,如果队列中已经存在任务,则计时器不会将其添加到队列中。这意味着,如果计时器过期,并且队列中已经有该计时器的实例,则不会再次添加它

我向你推荐这本书。它有一章是关于事件的,它准确地解释了你的问题

与所有应用程序一样,Web浏览器轮流占用一块CPU 时间,以及他们必须等待的时间将根据负载而变化。 这就是导致异步计时器延迟的原因-一个200毫秒的计时器 实际上可能需要202ms或204,这将逐渐发送 秒表坏了

在这种情况下,解决方案是不依赖于计时器的速度 所有,而是查询每个循环的系统时间并派生 从中得到的结果


来源:

事实上,找到一种实现Delta时间的方法,然后将tick frames乘以它。感谢Francisco,实际上我想写一个函数,当ms达到1000时,第二个函数加1。我会看一看你推荐的书并核对你的答案。再次感谢!所有浏览器都有一个最小间隔设置,我上次检查的时间大约是15毫秒。