dollar
@dollar
Делай добро и бросай его в воду.

Почему for(;;); вешает процесс?

for(;;);
Ведь здесь условие имеет значение undefined - оно просто не должно выполняться.
  • Вопрос задан
  • 166 просмотров
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
Условие.
Выражение, выполняющееся на каждой интерации цикла. Если выражение истинно, цикл выполняется. Условие не является обязательным. Если его нет, условие всегда считается истиной. Если выражение ложно, выполнение переходит к первому выражению, следующему за for.

MDN: for
Ответ написан
Комментировать
Lynn
@Lynn
nginx, js, css
https://developer.mozilla.org/en-US/docs/Web/JavaS...

> The condition expression is evaluated. If the value of condition is true, the loop statements execute. If the value of condition is false, the for loop terminates. If the condition expression is omitted entirely, the condition is assumed to be true.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
profesor08
@profesor08 Куратор тега JavaScript
Потому что результатом будет бесконечный цикл. У тебя нет условия выхода из цикла. В цикле for есть три зоны разделенные точкой с запятой, они не обязаны содержать операции. Это аналог while(true).
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если посмотреть на стандарт, то обнаруживается, что в случае пустого условия (test) проверка на завершение цикла по условию не проводится вообще.
1. Let V be undefined.
2. Perform ? CreatePerIterationEnvironment(perIterationBindings).
3. Repeat,
    a. If test is not [empty], then
          i. Let testRef be the result of evaluating test.
         ii. Let testValue be ? GetValue(testRef).
        iii. If ToBoolean(testValue) is false, return NormalCompletion(V).
    b. Let result be the result of evaluating stmt.
    c. If LoopContinues(result, labelSet) is false, return Completion(UpdateEmpty(result, V)).
    d. If result.[[Value]] is not empty, set V to result.[[Value]].
    e. Perform ? CreatePerIterationEnvironment(perIterationBindings).
    f. If increment is not [empty], then
          i. Let incRef be the result of evaluating increment.
         ii. Perform ? GetValue(incRef).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы