2010-08-26 5 views
38

Я просматриваю какой-то существующий код в веб-приложении. Я видел это:Является ли setTimeout без задержки так же, как выполнение функции мгновенно?

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

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

+0

Aishwar, вы могли бы принять ответ angusC в? То, что вы приняли, не совсем правильно, и angusC показывает, почему. – Lynn

ответ

72

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

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

+1

Собственно, см. Другие ответы для правильного объяснения! – Qwerty

1

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

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

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

+8

В этом вопрос ... вопрос о том, что происходит, когда нет задержки ... –

+0

О, ладно. Я думал, что это синтаксическая ошибка, так как различные документы утверждают, что это требуемый параметр. Затем я попробовал быстро, и это сработало. – Gary

+0

Второй параметр (больше?) Требуется https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout –

 Смежные вопросы

  • Нет связанных вопросов^_^