Бесконечный цикл в JavaScript, который не вызывает предупреждение браузера

Я показываю набор изображений в виде наложения с помощью Google Maps. Отображение этих изображений должно происходить в бесконечном цикле, но большинство браузеров это обнаруживают и выводят предупреждение.

Есть ли способ создать бесконечный цикл в JavaScript, чтобы браузер не останавливал его и не предупреждал об этом?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
5 500
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

Попробуйте setInterval или setTimeout.

Вот пример:

(show = (o) => setTimeout(() => {

  console.info(o)
  show(++o)

}, 1000))(1);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Возможно, попробуйте использовать таймер, который извлекает следующее изображение каждый раз, когда он тикает, к сожалению, я не знаю никакого JavaScript, поэтому я не могу предоставить образец кода

Вы должны использовать таймер для непрерывного вывода новых изображений вместо бесконечного цикла. Проверьте функцию setTimeout(). Предостережение заключается в том, что вы должны вызвать его в функции, которая вызывает сама себя, чтобы она снова подождала. Пример взят из w3schools:

var c = 0
var t;

function timedCount() {
  document.getElementById('txt').value = c;
  c = c + 1;
  t = setTimeout("timedCount()", 1000);
}
<form>
  <input type = "button" value = "Start count!" onClick = "timedCount()">
  <input type = "text" id = "txt">
</form>

Вы должны использовать timedCount вместо "timedCount()". Нет причин, по которым вам нужно оценивать вызов функции, а не просто передавать функцию напрямую.

Peter Olson 19.09.2011 17:26

Вместо использования бесконечного цикла создайте таймер, который продолжает срабатывать каждые n секунд - вы получите аспект «работать вечно» без зависания браузера.

function foo() {
  alert('hi');
  setTimeout(foo, 5000);
}

Затем просто используйте действие типа "onload", чтобы запустить 'foo'

Следующий код устанавливает интервал и устанавливает изображение для следующего изображения из массива источников изображений каждую секунду.

function setImage(){
  var Static = arguments.callee;
  Static.currentImage = (Static.currentImage || 0);
  var elm = document.getElementById("imageContainer");
  elm.src = imageArray[Static.currentImage++];
}
imageInterval = setInterval(setImage, 1000);

Если это соответствует вашему случаю, вы можете продолжать загружать новые изображения в ответ на взаимодействие с пользователем, например этот сайт делает (просто прокрутите вниз).

Просто формальный ответ:

var i = 0;

while (i < 1) {
   do something...

   if (i < 1) i = 0;
   else i = fooling_function(i);  // must return 0
}

Думаю, ни один браузер не обнаружит такие вещи.

Тем не менее, браузеры сообщат вам, если операция любой занимает слишком много времени. Ваша петля не исключение. Единственный способ - использовать setInterval / setTimeout (как уже отмечалось).

Vitaly Sharovatov 15.09.2008 21:07

Другие вопросы по теме