Бесконечный цикл заблокирует главный поток: DOM будет многократно изменяться, но браузер не получит возможности нормально отрисовывать новые числа и обрабатывать ввод.
Бесконечный цикл в JavaScript и его влияние на отрисовку страницы
Бесконечный цикл заблокирует главный поток: DOM будет многократно изменяться, но браузер не получит возможности нормально отрисовывать новые числа и обрабатывать ввод.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какие последствия возникнут при выполнении приведённого кода в браузере и что пользователь увидит на экране.
<html>
<head>
<title>JS test 1</title>
</head>
<body>
<div id="container">
0
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const hostEl = document.getElementById('container');
let counter = 0;
while (true) {
hostEl.innerText = counter++;
}
});
</script>
</body>
</html>
Ответ
Бесконечный цикл заблокирует главный поток: DOM будет многократно изменяться, но браузер не получит возможности нормально отрисовывать новые числа и обрабатывать ввод.
Пользователь увидит зависшую страницу — возможно, уже нарисованный начальный 0, но точный последний кадр зависит от того, успел ли браузер отрисовать страницу до обработчика. Увеличивающийся счётчик на экране не появится. Для визуальных обновлений нужен конечный шаг и возврат управления среде, например очередной requestAnimationFrame. Не запускайте этот пример ради проверки: он намеренно блокирует вкладку.