Является ли setTimeout без задержки так же, как выполнение функции мгновенно?
Я просматриваю какой-то существующий код в веб-приложении. Я видел это:
window.setTimeout(function () { ... })
Является ли это тем же самым, что сразу же запускает содержимое функции?
Ответ 1
Он не обязательно будет запускаться сразу, и не будет явно устанавливать задержку на 0. Причина в том, что setTimeout удаляет функцию из очереди выполнения, и она будет вызываться только после завершения JavaScript с текущей очередью выполнения.
Существует минимальная задержка, которую использует setTimeout (4 мс в соответствии с HTML5, Firefox 3.6 использует 10 мс). Об этом сообщается на веб-сайте Центра разработки Mozilla страница документации.
Ответ 3
Вам не хватает параметра миллисекунды...
setTimeout(function() { /*something*/ }, 0);
0 устанавливает задержку на 0, но то, что она на самом деле делает, это позволить вашей функции "перепрыгнуть в очередь" в списке выполнения браузера. В браузере есть куча вещей, таких как рендеринг объектов на странице, и, вызывая это, ваша функция будет запущена, как только у браузера будет несколько циклов.