Проверяет понимание работы очереди задач и таймеров в JavaScript, а также разницу между немедленным и отложенным выполнением кода.
setTimeout — это функция, которая планирует выполнение переданного колбэка через указанное количество миллисекунд. Однако важно понимать, что задержка — это минимальное время ожидания, а не точное. Реальное выполнение зависит от текущего состояния цикла событий (event loop) и очереди задач.
Когда вызывается setTimeout, браузер или Node.js создаёт таймер и помещает колбэк в очередь задач после истечения задержки. Если в этот момент выполняется другой код или очередь переполнена, колбэк будет ждать своей очереди.
setTimeout с задержкой 0 не выполняет код сразу. Он добавляет колбэк в конец очереди задач, что позволяет текущему синхронному коду завершиться первым. Это часто используется для отложенного выполнения, чтобы не блокировать интерфейс или дать браузеру возможность перерисовать страницу.
setTimeout с задержкой 1000 планирует выполнение через минимум одну секунду. Если в очереди есть другие задачи, они выполнятся раньше, и фактическое время может быть больше. Например, если основной поток занят тяжёлыми вычислениями, колбэк выполнится только после их завершения, даже если прошло больше секунды.
console.log('Начало');
setTimeout(() => {
console.log('Таймер 0 мс');
}, 0);
setTimeout(() => {
console.log('Таймер 1000 мс');
}, 1000);
console.log('Конец');
// Вывод: Начало, Конец, Таймер 0 мс, Таймер 1000 мсВ этом примере сначала выполняются синхронные логи, затем колбэк с задержкой 0, и только потом колбэк с задержкой 1000. Даже если задержка 0, код не выполняется мгновенно, а ставится в очередь.
Разница между задержками 0 и 1000 заключается в минимальном времени ожидания и порядке в очереди. Задержка 0 полезна для отложенного выполнения без блокировки, а задержка 1000 — для планирования действий через секунду. В обоих случаях фактическое время зависит от состояния event loop, поэтому не стоит полагаться на точность таймеров для критически важных операций.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию