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

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

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

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

Ответы [ 3 ]

82 голосов
/ 27 августа 2010

Он не обязательно запустится сразу, равно как и явное установление задержки на 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/

20 голосов
/ 27 августа 2010

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

1 голос
/ 27 августа 2010

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

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

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

...