Является ли setTimeout без задержки так же, как выполнение функции мгновенно?

Я просматриваю какой-то существующий код в веб-приложении. Я видел это:

window.setTimeout(function () { ... })

Является ли это тем же самым, что сразу же запускает содержимое функции?

Ответы

Ответ 1

Он не обязательно будет запускаться сразу, и не будет явно устанавливать задержку на 0. Причина в том, что setTimeout удаляет функцию из очереди выполнения, и она будет вызываться только после завершения JavaScript с текущей очередью выполнения.

console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2

Подробнее см. http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/

Ответ 2

Существует минимальная задержка, которую использует setTimeout (4 мс в соответствии с HTML5, Firefox 3.6 использует 10 мс). Об этом сообщается на веб-сайте Центра разработки Mozilla страница документации.

Ответ 3

Вам не хватает параметра миллисекунды...

setTimeout(function() { /*something*/ }, 0);

0 устанавливает задержку на 0, но то, что она на самом деле делает, это позволить вашей функции "перепрыгнуть в очередь" в списке выполнения браузера. В браузере есть куча вещей, таких как рендеринг объектов на странице, и, вызывая это, ваша функция будет запущена, как только у браузера будет несколько циклов.