JavaScript: немедленный таймаут
0 в качестве значения для setTimeout
Вы этой небольшой статье мы обратим внимание на особенности использования метода setTimeout
в JavaScript.
Итак, у нас есть следующий код:
setTimeout(() => console.log('First message'), 0);
console.log('Second message');
Какое сообщение будет выведено в консоли первым: Second message
или First message
?
Ответ кажется очевидным. Для setTimeout
установлено время задержки 0. Кажется, сообщение First message
появится в консоли первым.
Но не все так просто. Давайте разберемся с особенностями метода setTimeout
в JavaScript.
Синтаксис метода имеет следующий вид:
setTimeout(func|code, [delay], [arg1], [arg2], ...)
Аргумент delay
, устанавливающий время задержки исполнения кода в миллисекундрах, но не является обязательным и по умолчанию равен 0.
Секрет кроется в том, что setTimeout
является одним из традиционных методов, используемых для асинхронного исполнения кода в JavaScript. Асинхронный код, исполняемый этим методом, находится в основном потоке и будет выполнен только после его освобождения (то есть, как только основной поток будет пустым).
В связи с этим появлется понятие немедленного таймаута. setTimout
при значении задержки равным 0, выполнит код как можно скорее, но только после того, как будет исполнен код основного потока.
Таким образом, в консоли сначала появится сообщение Second message
и только после него First message
.
Этот прием известен многим JavaScript-разработчикам, и используется в случаях, когда callback-фукнция должна быть запущена сразу после исполнения кода основного потока.
Спасибо за внимание