Javascript 设定间隔的实时性

Javascript 设定间隔的实时性,javascript,setinterval,timing,Javascript,Setinterval,Timing,这些函数的间隔是否存在差异 function myIntervalFunction() { for(var c=1000000000000;c>0;--c) ; } setInterval(myIntervalFunction,1000); 及 那么setInterval是在给定的时间间隔内暂停javaScript,还是在精确的毫秒后触发javaScript呢? 在测试之后,我认为如果一些代码运行会花费更长的时间,但我不确定。这可能吗?如果可能的

这些函数的间隔是否存在差异

    function myIntervalFunction() {
        for(var c=1000000000000;c>0;--c) ;
    }

    setInterval(myIntervalFunction,1000);

那么setInterval是在给定的时间间隔内暂停javaScript,还是在精确的毫秒后触发javaScript呢? 在测试之后,我认为如果一些代码运行会花费更长的时间,但我不确定。这可能吗?如果可能的话,我如何使它精确


注意:我的代码不是在HTML5画布上循环绘制。

调用
setInterval
会将您的函数放入计时器的回调队列中,但它不能保证精确地到达您指定的间隔。每个JS引擎实现在实现计时器的方式上有所不同,但大多数都可能有某种计时器回调池,这意味着很难预测调用回调函数的期望间隔和实际间隔之间的确切变化

当降到几十毫秒级别时,分辨率会变差


如果您正在寻找一种方法来获得恒定的动画帧速率,那么您可能想看看使用现代borwsers中可用的帧速率的讨论。

是的,有一点不同。第一个在执行
myIntervalFunction
时阻塞所有其他JS(至少直到
for
循环完成);第二种情况并非如此。请记住,JavaScript是单线程的。显然,实际执行代码所需的时间比不执行任何操作所需的时间要长。。。所需时间取决于实际执行的内容。@Ian从技术上讲,第二个也会阻塞。但是,由于该方法中没有任何内容,因此运行速度要快得多。@Bic绝对,我没有很好地使用它。我的意思是第一个将阻塞更多,因为它添加了第二个没有的
for
循环。任何JavaScript代码都会阻止其他JavaScript代码
setInterval
基本上只是在调用堆栈上放置一个函数,以便在x毫秒后执行–但是如果此时还有另一个函数仍在运行,则无法执行,因为JS是单线程的如果您想更好地控制定时动画,请查看
requestAnimationFrame
。requestAnimationFrame看起来是一个不错的选择,但它有点复杂。谢谢你的快速回复。
    function myIntervalFunction() {
    }

    setInterval(myIntervalFunction,1000);