Как работи функцията setTimeout в JavaScript?
sobes.tech AI
Отговор от 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(showMessage, 1000, "Мир"); // Ще изведе "Здравей, Мир!" след 1 секунда
setTimeout връща числов ID на таймера, който може да бъде използван за отменяне на планираното изпълнение с clearTimeout.
Пример за използване на clearTimeout:
let timerId = setTimeout(function() {
console.log("Тази линия няма да бъде изведена");
}, 3000);
console.log("Таймерът е стартиран...");
// Отмяна на таймера
clearTimeout(timerId);
console.log("Таймерът е отменен.");
Важни моменти:
- Забавянето не е гарантирано точно, особено при висока натовареност на основния поток. Посоченото време е минималното забавяне преди поставянето на функцията в опашката с обратни повиквания.
- В Node.js таймерите се управляват от цикъла на събития (event loop), подобно на браузъра.