Бесконечный цикл в JavaScript и его влияние на отрисовку страницы

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

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

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

Бесконечный цикл заблокирует главный поток: 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. Не запускайте этот пример ради проверки: он намеренно блокирует вкладку.

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

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

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

Подробнее