0

次のように、ループ内からループ外に存在する変数を更新しようとしています。

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回実行されるより大きなブロック内にあると仮定すると、1This is your first run回、次にYou have already run this loop at least once3回出力されると思います。代わりに私はThis is your first run4回取得し、console.log("firstRun is " + firstRun);常に出力しますtrue

これは私がよく理解していないスコープの問題だと確信しています。私を許してください、私はルビーの土地から来ました:)

4

4 に答える 4

3

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");
};
于 2013-01-31T01:20:10.653 に答える
0

ブール値は反復ごとにリセットされると想定しています。var firstRun = true;ループの外側に移動してください!

var firstRun = true;
for (...) {
  if(firstRun){firstRun=false;}
  else{}
}
于 2013-01-31T01:20:29.540 に答える
0

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");
};
于 2013-01-31T01:20:49.483 に答える
0

そのブロック全体がループ内にある場合は、反復ごとに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");
    };
}
于 2013-01-31T01:23:34.417 に答える