Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Что такое setTimeout и setInterval?
setTimeout выполняет указанную функцию один раз через заданное время, а setInterval — периодически, с указанным интервалом. Оба метода работают асинхронно, что значит, что они не блокируют основной поток выполнения программы. Чтобы остановить выполнение setInterval, нужно вызвать clearInterval, а для остановки отложенного вызова setTimeout — clearTimeout.
Как написать React-компонент, чтобы при монтировании запускался setInterval, выводящий в консоль "Hello world" каждые 10 секунд? Что важно учесть при такой реализации с setInterval?
useEffect(() => {
const intervalId = setInterval(() => {
console.log('Hello world');
}, 10000);
return () => clearInterval(intervalId); // Очистка при размонтировании
}, []);Важно:
Очистка в return — иначе интервал будет работать после удаления компонента.
Пустой массив зависимостей [] — чтобы эффект выполнился только при монтировании.
Гарантирует ли setTimeout выполнение callback ровно через заданное время?
setTimeout не гарантирует выполнение callback ровно через указанное время. Он гарантирует, что callback не выполнится раньше, чем пройдёт заданная задержка. После истечения задержки callback попадает в очередь задач и будет выполнен, когда освободится call stack. На фактическое время влияет нагрузка, блокировки и приоритеты очередей. Поэтому таймер часто срабатывает позже.
Почему setTimeout может выполниться позже указанного времени?
setTimeout может выполниться позже, потому что после истечения времени callback попадает в очередь задач и ждёт своей очереди. Если основной поток занят синхронным кодом, выполнение откладывается. Также задержку увеличивают microtask, рендер и обработка событий. В фоне браузер может специально замедлять таймеры. Поэтому задержка может стать заметно больше, чем указанное значение.
Как реализовать компонент-секундомер, который обновляется раз в секунду?
Проще всего хранить “прошедшие секунды” в useState, а запуск обновления сделать в useEffect через setInterval. Внутри интервала увеличивать значение каждую секунду через функциональное обновление setState(prev => prev + 1). Обязательно вернуть функцию очистки, чтобы остановить интервал при размонтировании. Для более точного секундомера лучше хранить startTime в useRef и пересчитывать прошедшее время от реального времени, чтобы уменьшить “дрейф”.
setTimeout и setInterval как стандарт JavaScript
Является ли setTimeout и setInterval стандартом языка JavaScript?
Что такое JavaScript и зачем он нужен?
Рейтинг:
4
Сложность:
3
Рейтинг:
3
Сложность:
2
Рейтинг:
3
Сложность:
4
Рейтинг:
3
Сложность:
5
Рейтинг:
5
Сложность:
6
Рейтинг:
5
Сложность:
6
Рейтинг:
4
Сложность:
7
Рейтинг:
4
Сложность:
5