Что отобразит браузер при бесконечном обновлении текста элемента

Бесконечный синхронный цикл не даёт браузеру нормально обновлять экран. Наблюдаемого конечного значения нет: страница зависнет, даже если DOM-свойство непрерывно меняется.

Короткий ответ

Что ответить на собеседовании

Бесконечный синхронный цикл не даёт браузеру нормально обновлять экран. Наблюдаемого конечного значения нет: страница зависнет, даже если DOM-свойство непрерывно меняется.

Подробный разбор

Ответ с пояснениями

Условие

Нужно понять, какой результат будет виден пользователю после выполнения следующего кода.

<html>
<head>
    <title>JS test 1</title>
</head>
<body>
    <div id="container">
    0
    </div>
    <<script>
    document.addEventListener('DOMContentLoaded', () => {
    const containerEl = document.getElementById('container');
    let cnt = 0;

    while(true) {
    containerEl.innerText = cnt++;
    }
    }
    );
    </script>
</body>
</html>

Определите, какой текст будет отображён в элементе <div id="container"> после загрузки страницы.

Ответ

Бесконечный синхронный цикл не даёт браузеру нормально обновлять экран. Наблюдаемого конечного значения нет: страница зависнет, даже если DOM-свойство непрерывно меняется.

innerText изменяет DOM синхронно, но показ кадров требует возврата управления браузеру. Пользователь обычно увидит ранее отрисованное 0 или незавершённую загрузку — конкретное видимое состояние зависит от того, успел ли пройти первый paint.

Лишний < перед script — ошибка HTML-разметки, но она не делает бесконечный цикл безопасным. Для обновляемого счётчика используйте ограниченный цикл с уступкой управления, таймер или requestAnimationFrame. Нельзя обещать, что браузер будет показывать каждое увеличение cnt; опасный пример запускать не требуется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее