2017-06-06 13 views
1

変数counterは何らかの理由で変更されず、初期値の50のままです。グローバル変数で、setInterval()によって呼び出される関数の内部で変更しようとしています。Javascript変数はsetInterval()関数内で変更されませんか?

var mode = false; 
var counter = 50; 
var interval = null; 
var increment = false; 
var MAX = 50; 
var MIN = 0; 
var INTERVAL_MS = 3000; 

setInterval(doInterval, INTERVAL_MS); 

function doInterval() { 
    if(increment) 
    { 
     counter += 1; 
    } 
    else 
    { 
     console.log("Decrement, " + counter); 
     counter -= 1; 
    } 

    // Set direction 
    if(counter = MIN) 
    { 
     increment = true; 
    } 
    else if(counter = MAX) 
    { 
     increment = false; 
    } 

    console.log("set to " + counter + " (D) Increment next time? " + increment); 

    // dosomething with the values 
} 

このコード

デクリメント、50

セット(D)インクリメント50の次回の出力?偽

デクリメント、50

セット50(D)インクリメント次回?偽

減額、50

を50に設定しました(D)次回に増分しますか?偽

そして、それは50だと増分が偽であるのでそう

に、それは49、48になるはずです、しかし私が変数の値を変更することはできませんようです。理由は何でしょうか?このコードはNodeJSアプリケーション内で実行されます。

答えて

4

これらの線

if(counter = MIN) 

else if(counter = MAX) 

は、minまたはmaxにカウンタを設定しています。あなたは===トリプルイコール(==はこの場合は問題ありません)にして、等しいかどうかをチェックします。

+0

ああ、この初心者の間違いです。私は端末でプログラミングしていたので、それを見て苦労しました。 –

0

あなたは誤ってifステートメントに値を割り当てていました。これを修正してください。この部分で

if(counter == MIN) 
    { 
    increment = true; 
    } 
    else if(counter == MAX) 
    { 
    increment = false; 
    } 

は、あなたがこれを使用することができ、それを修正するには、次の

var mode = false; 
var counter = 50; 
var interval = null; 
var increment = false; 
var MAX = 50; 
var MIN = 0; 
var INTERVAL_MS = 3000; 

setInterval(doInterval, INTERVAL_MS); 

function doInterval() { 
    if(increment) 
    { 
    counter += 1; 
    } 
    else 
    { 
    console.log("Decrement, " + counter); 
    counter -= 1; 
    } 

    // Set direction 
    if(counter == MIN) 
    { 
    increment = true; 
    } 
    else if(counter == MAX) 
    { 
    increment = false; 
    } 

    console.log("set to " + counter + " (D) Increment next time? " + increment); 

    // dosomething with the values 
} 
1

は=割り当てのためのものであり、==は平等のチェックです(===厳格なチェックのため)。コードを修正するには、平等チェックを使用してください。

+0

こんにちは、これがなぜ機能するのかに関する何らかの解説を加えてください。 – stef

+0

@stef編集済みの回答、ありがとう! – Basu

関連する問題