бесконечный цикл для цикла - PullRequest
1 голос
/ 20 марта 2019

Кто-нибудь может объяснить мне, как это создает бесконечный цикл?Я получил это из примера книги на JavaScript.

Код выглядит следующим образом:

function foo() {
  function bar(a) {
    i = 3; // changing the `i` in the enclosing scope's for-loop
    console.log( a + i );
  }
  for (var i=0; i<10; i++) {
    bar( i * 2 ); // oops, inifinite loop ahead!
  }
}
foo();

1 Ответ

1 голос
/ 20 марта 2019

Проблема в том, что вы меняете i из цикла for внутри вашей bar функции

i = 3;

Это означает, что за пределами bar не может быть достигнуто условие i < 10.

Так что вызовы bar будут выглядеть так:

  1. bar(0 * 2);, затем i = 3;, затем console.log(0 + 3);, затем i++
  2. bar(4 * 2);, затем i = 3;, затем console.log(8 + 3);, затем i++
  3. bar(4 * 2);, затем i = 3;, затем console.log(8 + 3);, затем i++
  4. и так далее ... i останется меньше, чем 10

Вы должны изменить свой код, чтобы избежать набора i = 3;, который является корнем вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...