在任何操作系统上都没有针对标准计时调用的准确计时器分辨率(这包括 Javascript——尽管我确实注意到评论和您链接的测试平均运行时间约为 4 毫秒,这表明一些复杂性超出了我提供的答案)。
通常,任何编程语言的标准计时函数的计时器调用都与操作系统的低分辨率计时器的底层分辨率相关联,不能保证在精确的毫秒数后递增,但在所有常见的情况下大约为 15 毫秒操作系统(包括所有版本的 Linux,以及 Windows 和 OSX)。
这意味着操作系统将间歇性地检查任何正在运行的程序发出的任何计时请求的时间是否已到(假设调用了低分辨率计时函数),而不管这些脚本使用的编程语言是什么/程序已编写。如果是,则系统为所讨论的目标程序的下一个时间片安排相应的回调函数。
平均而言,低分辨率计时器大约每 15 毫秒递增一次 - 但这是一个平均值;它随定时器的任何单独增量而变化,通常高端可达 25 毫秒,低端可达约 8 毫秒。这就是低分辨率系统计时器的本质——它对整个系统(和单个程序)的性能影响非常小,但它的精度仅为~15 ms。换句话说,精度为 1 毫秒(这就是为什么标准计时函数,例如 Javascript 计时函数,具有毫秒精度的原因),但精度仅为约 15 毫秒,给或取。精度和准确度是不同的。
低分辨率计时器以这种方式运行的原因正是我提到的原因——因此计时功能对系统的影响很小。存在更高分辨率的计时功能,但更加密集,需要许多 CPU 周期来测试和更新计时器。最高精度的定时器需要额外的物理硬件组件以及硬件中断,有时需要任务关键程序的独占高优先级访问。
底线是 Javascript 计时函数并不准确。平均而言,它们会在目标时间的大约 15 毫秒内触发,有时更少,有时更多。