Javascript 什么是setTimeout(函数(){//dostuff},0);实际上应该怎么做?

Javascript 什么是setTimeout(函数(){//dostuff},0);实际上应该怎么做?,javascript,performance,Javascript,Performance,这种模式是否: setTimeout(function(){ // do stuff }, 0); 从循环中实际将控制返回到UI?你应该什么时候用它?它是否在所有浏览器中都同样有效? 里面有些好消息。基本上,您是正确的,它可以在几乎所有浏览器上运行。很酷的把戏 您可能希望在本文作者给出的示例中使用此方法,以及在执行代码之前需要将执行返回到调用函数的实例中。显然,Javascript不是多线程的,但这很接近 希望这有帮助:)一旦线程上的任何其他挂起指令完成(如果没有任何

这种模式是否:

setTimeout(function(){
             // do stuff
}, 0);
从循环中实际将控制返回到UI?你应该什么时候用它?它是否在所有浏览器中都同样有效?

里面有些好消息。基本上,您是正确的,它可以在几乎所有浏览器上运行。很酷的把戏

您可能希望在本文作者给出的示例中使用此方法,以及在执行代码之前需要将执行返回到调用函数的实例中。显然,Javascript不是多线程的,但这很接近


希望这有帮助:)

一旦线程上的任何其他挂起指令完成(如果没有任何指令,则立即执行),它将同步调用该函数,并将控制权返回到UI。您应该在事件处理程序中使用它,因为您不希望在事件仍在传播时运行代码。它适用于所有浏览器

它异步运行代码(但不是并行运行)。延迟通常更改为最小10毫秒,但这并不重要

此技巧的主要用途是避免调用堆栈深度的限制。如果您有达到极限的风险(遍历深层树结构并计划在leaf上做大量工作),您可以使用timeout以新的空调用堆栈启动函数

您还可以使用它来避免阻塞当前线程。例如,如果您不希望
元素延迟页面加载:

<script>compute_last_pi_digit()</script> <!-- blocking -->

<script>setTimeout(compute_last_pi_digit,0)</script> <!-- non-blocking -->
compute\u last\u pi\u digit()
setTimeout(计算最后一个π位,0)

把它想象成在过去建立一个中断向量


它不会并行处理该代码,而是会在触发事件(在本例中为计时器完成)时跳转并执行该代码。

我发现,当同一个操作触发多个事件处理程序时,它非常有助于避免争用情况。

谢谢,我跳过了这个问题,它会产生一些好的链接。