почему глобальная переменная выполняется только один раз во вложенном цикле? - PullRequest
0 голосов
/ 15 апреля 2019

Почему глобальная переменная выполняется только один раз во вложенном цикле while (внутреннем)?

//not working as expected;
var i = 1;
var j = 1;
while(i<=3){
    console.log(i);
    i++;
    while(j<=3){
        console.log(j);
        j++;
    }
}

//working as expected;
var i = 1;
while(i<=3){
    console.log(i);
    i++;

    var j = 1;
    while(j<=3){
        console.log(j);
        j++;
    }
}
Когда я пишу приведенный выше код ( // не работает должным образом ), внутренний цикл while выполняется только 1-й 3 раза, затем он возвращается к вершине внешнего цикла while ивыполняет его и не возвращается во внутренний цикл while.Но когда я объявляю переменную и инициализирую ее как раз перед циклом while ( как внутренним, так и внешним ), он работает нормально.Почему?

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Это потому, что j не переназначается и после того, как становится> 3, внутренний цикл никогда не выполняется.

//not working as expected;
var i = 1;
var j = 1;
while(i<=3){
    console.log(i);
    i++;
    while(j<=3){
        console.log(j);
        j++;
    }
}

В этом коде во время первой итерации внешнего цикла j увеличивается с 1 to 3 когда i = 1.Когда i = 2, j уже 4, и он не переназначается, поэтому условие j <= 3 ложно и внутренний цикл не выполняется.

0 голосов
/ 15 апреля 2019

Поскольку вы не меняете значение обратно на 1 Попробуйте это:

var i = 1;
var j = 1;
while(i<=3){
 console.log(i);
 i++;
 while(j<=3){
    console.log(j);
    j++;
 }
 j = 1;
}
0 голосов
/ 15 апреля 2019

TLDR: j не переназначается на 1 при каждой итерации, если он глобальный.

Когда переменная j является глобальной, она не сбрасывается до 1 для каждого цикла.

outer loop output: i = 1
inner loop output: j = 1
inner loop output: j = 2
inner loop output: j = 3
outer loop output: i = 2
outer loop output: i = 3

Когда переменная j находится в первом цикле while, она сбрасывается при каждой итерации для вывода, например, так ...

outer loop output: i = 1
inner loop output: j = 1
inner loop output: j = 2
inner loop output: j = 3

outer loop output: i = 2
inner loop output: j = 1
inner loop output: j = 2
inner loop output: j = 3

outer loop output: i = 3
inner loop output: j = 1
inner loop output: j = 2
inner loop output: j = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...