Имеет ли этот шаблон:
setTimeout(function(){
// do stuff
}, 0);
Фактически вернуть управление пользовательскому интерфейсу из цикла? Когда вы должны его использовать? Работает ли он одинаково хорошо во всех браузерах?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


http://blog.thinkature.com/index.php/2006/11/26/escaping-the-javascript-call-stack-with-settimeout/
Там есть хорошая информация. В принципе, вы правы, и он работает практически во всех браузерах. Классный трюк.
Вы хотели бы использовать это в примере, который дал автор сообщения, а также в тех случаях, когда вам нужно вернуть выполнение обратно вызывающей функции до того, как ваш код будет выполнен. Javascript, по-видимому, не многопоточный, но это близко.
Надеюсь это поможет :)
Он будет синхронно вызывать функцию, как только будут выполнены любые другие ожидающие инструкции в потоке (что происходит сразу же, если их нет), и вернет управление пользовательскому интерфейсу. Вы должны использовать его в обработчике событий, где вы не хотите запускать код, пока событие все еще распространяется. Работает со всеми браузерами.
Он запускает код асинхронно (хотя и не параллельно). Задержка обычно меняется на минимум 10 мс, но это не имеет значения.
Основное использование этого трюка - избежать ограничения глубины стека вызовов. Если вы рискуете достичь предела (изучить глубокую древовидную структуру и планируете много работать с листами), вы можете использовать тайм-аут, чтобы запустить функцию с новым пустым стеком вызовов.
Вы также можете использовать его, чтобы избежать блокировки текущего потока. Например, если вы не хотите, чтобы элемент <script> задерживал загрузку страницы:
<script>compute_last_pi_digit()</script> <!-- blocking -->
<script>setTimeout(compute_last_pi_digit,0)</script> <!-- non-blocking -->
Думайте об этом как о настройке вектора прерывания в старые времена.
Он не будет обрабатывать этот код параллельно, но вместо этого он будет прыгать и выполнять его при срабатывании события (в данном случае таймера завершения).
Я считаю, что это очень полезно для предотвращения состояний гонки, когда несколько обработчиков событий запускаются из одного и того же действия.
Спасибо, я надеялся, что этот вопрос породит пару хороших ссылок.