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

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

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

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

49
задан Daniel Vandersluis 26 August 2010 в 11:38
поделиться

3 ответа

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

84
ответ дан 7 November 2019 в 11:34
поделиться

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

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

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

1
ответ дан 7 November 2019 в 11:34
поделиться

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

21
ответ дан 7 November 2019 в 11:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: