Как работает функция setTimeout в JavaScript?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
setTimeout планирует выполнение функции или фрагмента кода через указанное количество миллисекунд.
При вызове setTimeout браузер (или среда выполнения Node.js) создает таймер. Функция, переданная в setTimeout, помещается в очередь колбэков (task queue) после истечения заданного времени задержки.
JavaScript является однопоточным. Основной поток выполнения (main thread) выполняет код последовательно. Когда основной поток завершает текущие задачи, он проверяет очередь колбэков. Если в очереди есть функции (например, те, которые были отложены с помощью setTimeout) и основной поток свободен, он извлекает первую функцию из очереди и выполняет ее.
Это означает, что setTimeout(fn, 0) не гарантирует немедленное выполнение функции fn. Она будет выполнена как можно скорее, но только после завершения текущего выполнения кода в основном потоке.
Синтаксис:
setTimeout(function, milliseconds, param1, param2, ...);
function: Функция, которую нужно выполнить.milliseconds: Количество миллисекунд перед выполнением функции. Если пропущено, по умолчанию 0.param1, param2, ...: Необязательные аргументы, которые будут переданы в функцию при ее вызове.
Пример:
// Выведет "Привет!" через 2 секунды
setTimeout(function() {
console.log("Привет!");
}, 2000);
// Передача аргументов
function показатьСообщение(имя) {
console.log("Привет, " + имя + "!");
}
setTimeout(показатьСообщение, 1000, "Мир"); // Выведет "Привет, Мир!" через 1 секунду
setTimeout возвращает числовой ID таймера, который можно использовать для отмены запланированного выполнения с помощью clearTimeout.
Пример использования clearTimeout:
let timerId = setTimeout(function() {
console.log("Эта строка не будет выведена");
}, 3000);
console.log("Таймер запущен...");
// Отменяем таймер
clearTimeout(timerId);
console.log("Таймер отменен.");
Важные моменты:
- Задержка не гарантирована точно, особенно при высоких нагрузках на основной поток. Указанное время — это минимальная задержка перед помещением функции в очередь колбэков.
- В Node.js таймеры управляются циклом событий (event loop), аналогично браузеру.