dr.Brain

doctor Brain

мир глазами веб-разработчика

JavaScript: немедленный таймаут

0 в качестве значения для setTimeout

dr.Brain

время чтения 1 мин.

Photo by Joseph Gonzalez on Unsplash

Вы этой небольшой статье мы обратим внимание на особенности использования метода 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-фукнция должна быть запущена сразу после исполнения кода основного потока.


Спасибо за внимание

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.