Веб-редактор p5.js может вызвать исключение, когда обнаруживает бесконечный цикл в работающем эскизе.
Логика, которую веб-редактор использует для обнаружения бесконечных циклов, довольно проста, если цикл выполняет в течение более 500 мсек , исключение выдается. Это исключение может сбивать с толку, поскольку цикл, возможно, был почти готов к завершению в момент возникновения исключения с этим сообщением:
Выходящий из потенциальной бесконечной петли
Слово потенциал важно для понимания сообщения. Эта строка кода вызовет исключение:
while(true);
но любой конечный цикл, который выполняется более 500 мс, также вызовет сообщение.
В случаях, когда мы знаем, что цикл не является бесконечным, и мы также знаем, что для его завершения может потребоваться больше 500 мс, мы можем добавить комментарий noprotect, чтобы отключить защиту от бесконечного цикла:
var cnt = 0;
// noprotect
while(cnt < 80000)console.log(cnt++);
Этот код будет регистрировать числа от 0 до 79999. Перед добавлением комментария noprotect обязательно ознакомьтесь с кодом внимательно. Небольшая ошибка может превратить конечный цикл в бесконечный цикл:
var cnt = 0;
// noprotect
while(cnt < 80000)console.log(cnt);
Забыв увеличить cnt
, мы создали бесконечный цикл, который не будет обнаружен веб-редактором p5.js. Этот цикл будет выполняться, пока браузер не обнаружит его и не предложит пользователю остановить его или подождать.
В последней части вопроса спрашивается, почему удаление точки с запятой в конце строки изменяет поведение защиты цикла. Ответ прост: редактор должен добавить инструментарий, чтобы обеспечить обнаружение. Отсутствие точек с запятой приводит к тому, что редактор неправильно обрабатывает код. Рекомендуется заканчивать операторы javascript точкой с запятой. См. Ответы на . Вы рекомендуете использовать точки с запятой после каждого утверждения в javascript
Резюме
- Веб-редактор p5.js поможет вам избежать длительных циклов
- Используйте комментарий
noprotect
для преднамеренных длинных циклов
- использовать точку с запятой для завершения операторов javascript