Javascript 为什么我的1000毫秒超时函数比1秒函数花费的时间更长?
我正在编写一个Javascript计数器函数,但我不太确定 假设1000ms==1sJavascript 为什么我的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引擎不能保证
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毫秒。