Список задач в курсе JS: Основы
Исправь обработчик клика по кнопке
<p><b>Проблема:</b></p>Кнопка "Показать сообщение" не реагирует на клик. В консоли браузера появляется ошибка: <code>Cannot read properties of null (reading 'addEventListener')</code>. Это происходит потому, что скрипт пытается получить элемент до того, как он создан в <a href="https://developer.mozilla.org/ru/docs/Web/HTML" target="_tblank" rel="noopener noreferer">HTML</a>-документе.<p><b>Причина:</b></p>Скрипт подключён в <code><head></code> и выполняется сразу при загрузке, но в этот момент тег <code><button></code> ещё не существует в <a href="https://developer.mozilla.org/ru/docs/Web/API/Document_Object_Model" target="_tblank" rel="noopener noreferer">DOM</a>.<p><b>Ожидаемое поведение:</b></p>При нажатии на кнопку должно появляться модальное окно с текстом "Привет, мир!". Скрипт должен выполняться только после полной загрузки DOM. Используйте событие <code>DOMContentLoaded</code> и стрелочную функцию для обработчика.
Исправь отображение данных из API
<p><b>Проблема:</b></p>При загрузке страницы отображается надпись "Загрузка...", но данные из API никогда не появляются. В консоли ошибка: <code>Uncaught (in promise) TypeError: Cannot read property 'map' of undefined</code>.<p><b>Причина:</b></p>Код не проверяет успешность HTTP-ответа перед попыткой обработать JSON. Если сервер вернёт ошибку (например, 404), метод <code>response.json()</code> всё равно вызывается, но данные будут содержать объект ошибки, а не массив пользователей.<p><b>Ожидаемое поведение:</b></p>При успешной загрузке отобразить список имён пользователей из <a href="https://jsonplaceholder.typicode.com" target="_tblank" rel="noopener noreferer">https://jsonplaceholder.typicode.com/users</a>. При ошибке (сетевой сбой, статус 404/500) показать сообщение "Ошибка загрузки". Используйте <code>async/await</code> и проверяйте свойство <code>response.ok</code> перед обработкой данных.
Исправь утечку памяти в интервале
<p><b>Проблема:</b></p>Обратный отсчёт от 5 до 0 работает, но если закрыть вкладку, в консоли появляется ошибка: <code>Cannot set property 'textContent' of null</code>. При повторном открытии страницы запускается несколько таймеров одновременно.<p><b>Причина:</b></p>Интервал не очищается при выгрузке страницы, и каждый раз при перезагрузке создаётся новый интервал без удаления предыдущего. Это приводит к утечке памяти и множественным обновлениям DOM.<p><b>Ожидаемое поведение:</b></p>Таймер корректно останавливается при закрытии страницы. При повторной загрузке запускается только один таймер. Используйте <code>clearInterval</code> в обработчике события <code>beforeunload</code> и сохраняйте идентификатор интервала в переменную.