Что вызывает цикл While (1) для удаления кода сайта? - PullRequest
0 голосов
/ 06 мая 2019

Я выполнял некоторые циклы while в своем коде JavaScript, и мне стало интересно, что заставило цикл удалить весь код с веб-сайта (кроме одного заголовка).Я подумал, что это связано с тем, что цикл бесконечен (так как 1 всегда будет равняться 1), но мне было любопытно, почему это не просто сбой веб-сайта.Это из-за того, что document.write не указан по определенному пути?

javascript: (function() { while (1) {  document.write('Y'); }})();

Редактировать: Спасибо за помощь, похоже, что document.open был запущен и вызвал удаление кода страницы.Затем браузер подумал, что это связано с реальным кодом веб-сайта, и Chrome выдал сообщение об ошибке.

1 Ответ

5 голосов
/ 06 мая 2019

document.write() - это функция блокировки DOM, то есть браузер прерывает синтаксический анализ.Поэтому, когда ваша функция вызывается, браузер застревает на ней навсегда и не продолжает правильно отображать сайт.

Другой эффект заключается в следующем:

, как пишет document.writeв поток документов вызов document.write для закрытого (загруженного) документа автоматически вызывает document.open, который очистит документ.

https://developer.mozilla.org/en-US/docs/Web/API/Document/write

Оба зависят отвремя и может включать условия гонки.

Пожалуйста, прочитайте этот Q / A для получения дополнительной информации о SO:

Почему document.write считается "плохой практикой"?

...