Я пытаюсь обновить переменную, которая существует вне цикла изнутри цикла следующим образом:

var firstRun = true;
console.log("firstRun is " + firstRun);
if(firstRun == true){
    console.log("This is your first run");
    firstRun = false;
}else{
    console.log("You have already run this loop at least once");
};

Предполагая, что этот блок кода находится внутри большего блока, который будет выполняться 4 раза, я ожидал бы, что он выдаст This is your first run один раз, затем You have already run this loop at least once три раза. Вместо этого я получаю This is your first run 4 раза и console.log("firstRun is " + firstRun); всегда выводит true

Я уверен, что это проблема с областью, которую я не совсем понимаю. Прости, я родом из земли Руби :)

0
Jason Burgett 31 Янв 2013 в 05:17

4 ответа

Лучший ответ

Вы заново выделяете firstRun каждый шаг в цикле. Переместить var firstRun = true; из цикла.

Если вы не можете вывести его из цикла, вам придется использовать объект и проверить, был ли он объявлен перед назначением объекта:

var firstRun = firstRun || {ran: false};

if (firstRun.ran == true) {
    console.log("This is your first run");
    firstRun.ran = false;
} else {
    console.log("You have already run this loop at least once");
};
3
Joseph Silber 31 Янв 2013 в 01:20

Если весь этот блок находится в вашем цикле, вы будете сбрасывать var firstRun = true на каждой итерации. Вы захотите установить var firstRun = true вне цикла (прямо перед ним для ясности).

var firstRun = true;
for (var i = 0; i < 4; i++) {
    console.log("firstRun is " + firstRun);
    if(firstRun == true){
        console.log("This is your first run");
        firstRun = false;
    } else {
        console.log("You have already run this loop at least once");
    };
}
0
David Hamp 31 Янв 2013 в 01:23

Я предполагаю, что логическое значение сбрасывается на каждой итерации. Переместите var firstRun = true; вне цикла!

var firstRun = true;
for (...) {
  if(firstRun){firstRun=false;}
  else{}
}
0
epascarello 31 Янв 2013 в 01:20

Вы сбрасываете переменную firstRun каждый раз в цикле, поэтому при выполнении условного оператора значение firstRun всегда будет true.

Вам нужно сделать что-то вроде этого

var firstRun = true;

//Loop only following block
if(firstRun == true){
    console.log("This is your first run");
    firstRun = false;
}else{
    console.log("You have already run this loop at least once");
};
0
Arun P Johny 31 Янв 2013 в 01:20