Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';无法理解`setTimeout()中的最小超时值`_Javascript_Settimeout - Fatal编程技术网

Javascript Can';无法理解`setTimeout()中的最小超时值`

Javascript Can';无法理解`setTimeout()中的最小超时值`,javascript,settimeout,Javascript,Settimeout,在一些问题中,我看到人们谈论“setTimeout的最小超时”,但我真的不能理解它 它说HTML5规范中的最小超时值是4ms,所以我认为,如果我在浏览器中运行以下代码(比如Chrome): 输出应为: 333 222 111 000 但实际上是: 111 000 222 333 看起来即使它们小于4(除了0和1之外),它们仍然会按照指定的超时运行 如何理解4ms的值?4ms的限制是由HTML5规范规定的,并且在2010年及以后发布的浏览器中是一致的 要在现代浏览器中实现0毫秒超时,可以使用

在一些问题中,我看到人们谈论“setTimeout的最小超时”,但我真的不能理解它

它说HTML5规范中的最小超时值是
4ms
,所以我认为,如果我在浏览器中运行以下代码(比如Chrome):

输出应为:

333
222
111
000
但实际上是:

111
000
222
333
看起来即使它们小于4(除了
0
1
之外),它们仍然会按照指定的超时运行


如何理解4ms的值?

4ms的限制是由HTML5规范规定的,并且在2010年及以后发布的浏览器中是一致的

要在现代浏览器中实现0毫秒超时,可以使用window.postMessage()

更多信息


阅读推荐文章后(感谢@Rayon和@rafaelcastrocouto),还有这篇:

我意识到可能我误解了“最小”延迟值的含义

setTimeout
中指定的超时有两种含义:

  • 函数将在指定超时时或之后运行(而不是在此之前)
  • 顺序将由指定的超时值决定,越小越早(在某些平台中,
    0
    被视为与
    1
    相同),如果它们具有相同的超时,则第一次添加的时间将越早
  • 我们不需要考虑该层中的“最小”延迟值(例如
    4ms


    然后,这些任务将由Javascript运行时执行。运行时将从事件队列中逐个获取任务(同时检查超时是否正常),并执行它们。但是对于一些性能问题,运行时不能在上一个任务完成后立即运行下一个任务,可能会有一个微小的延迟(根据不同的运行时实现),在HTML5规范中,延迟应该>=4ms(在早期浏览器中是10ms)

    4ms
    可以更好地理解为
    250fps
    。有点高,你不觉得吗?我觉得你必须读一下,好吧,那么你对OP代码的解释是什么呢?这将取决于JS引擎的实现。。。这意味着在其他浏览器中可能会得到不同的结果。我建议你用它来更好地理解这些时间延迟。一种可能的解释是,JS引擎可以向回调例程传递一个额外的参数,以毫秒为单位指示超时的“实际延迟时间”。。。格拉茨@拉斐尔·卡斯特罗库托很高兴听到这个消息:)
    111
    000
    222
    333