QUESTION: Що таке setTimeout і setInterval?
Функції setTimeout і setInterval є фундаментальними інструментами в JavaScript для керування часом та планування виконання коду в асинхронному режимі через механізм циклу подій. Метод setTimeout(fn, ms) використовується для того, щоб виконати передану функцію fn один раз після того, як пройде задана кількість мілісекунд ms. Це корисно для створення відкладених дій, наприклад, приховування спливаючого сповіщення через три секунди або реалізації дебаунсу під час введення тексту в поле пошуку.
У свою чергу, метод setInterval(fn, ms) призначений для циклічного повторення вказаної функції через рівні інтервали часу. Він продовжує працювати доти, доки виконання не буде зупинено примусово. Обидва методи повертають унікальний числовий ідентифікатор таймера (ID), який використовується для їх скасування. Для скасування запланованого одиничного виклику застосовується функція clearTimeout(timerId), а для зупинки повторюваного інтервалу — clearInterval(timerId), що є обов'язковою вимогою для запобігання витокам пам'яті, наприклад, під час розмонтування компонентів у фреймворках.
Важливо розуміти особливості роботи цих таймерів у браузері. Вказана затримка в мілісекундах не є гарантованим часом точного спрацьовування, а є лише мінімально допустимою паузою. Через однопотокову природу JavaScript та особливості роботи циклу подій (Event Loop), якщо основний потік зайнятий важкими обчисленнями, таймер чекатиме своєї черги. Крім того, у сучасних браузерах для вкладених таймерів або неактивних вкладок існує апаратне обмеження мінімальної затримки, яка зазвичай становить близько 4 мілісекунд.