Javascript变量在setInterval()函数中没有变化?

时间:2017-06-06 19:10:19

标签: javascript node.js

变量counter由于某种原因没有改变,它保持初始值50,它是一个全局变量,试图在setInterval()调用的函数内部进行更改。 / p>

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

     

设置为50(D)下次增加?假

     

减量,50

     

设置为50(D)下次增加?假

     

减量,50

     

设置为50(D)下次增加?假

     

等等

因为它的50和增量是假的,它应该变成49,48,但似乎我不能改变变量的值。可能是什么原因?代码在NodeJS应用程序中运行。

3 个答案:

答案 0 :(得分:4)

这些行

if(counter = MIN)

else if( counter = MAX )

将计数器设置为MIN或MAX。您希望===三等于(在这种情况下==正常)以检查是否相等。

答案 1 :(得分:1)

=用于赋值,==是等式检查(===用于严格检查)。请使用等式检查来修复您的代码。

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

答案 2 :(得分:0)

您在if语句中意外分配了值。试试这个来解决它。

在这部分

    var angle = this.toRad(client.rotation); // rotation of the player
    var gunStartAngle = angle + Math.PI/4;
    var sqrt2 = Math.sqrt(2); 

    // cell.position is the players position
    var pos = new Vec2(
        cell.position.x + cell._size * sqrt2 * Math.cos(gunStartAngle),
        cell.position.y + cell._size * sqrt2 * Math.sin(gunStartAngle)
    );

要解决此问题,您可以使用:

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