Переменная JavaScript не меняется внутри функции setInterval ()?

1

По какой-то причине counter переменных не изменяется, он остается своим начальным значением, равным 50. Это глобальная переменная, которая пытается быть изменена внутри функции, называемой 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

установить в 50 раз (D) Приращение в следующий раз? ложный

декремент, 50

установить в 50 раз (D) Приращение в следующий раз? ложный

декремент, 50

установить в 50 раз (D) Приращение в следующий раз? ложный

И так далее

Поскольку значение 50 и приращение ложное, оно должно стать 49, 48, однако кажется, что я не могу изменить значение переменной. Что может быть причиной? Код запускается в приложении NodeJS.

Теги:

3 ответа

4
Лучший ответ

эти линии

if(counter = MIN)

а также

else if( counter = MAX )

устанавливают счетчик MIN или MAX. Вы хотите, чтобы === triple equals (== в порядке), чтобы проверить равенство.

  • 0
    Ах, такая ошибка новичка ... Было трудно увидеть это, потому что я программировал в терминале ... Это, конечно, исправило!
1

= для присваивания, а == - проверка равенства (=== для строгой проверки). Пожалуйста, используйте проверку равенства, чтобы исправить свой код.

// Set direction
    if(counter == MIN)
    {
        increment = true;
    }
    else if(counter == MAX)
    {
        increment = false;
    }
  • 0
    Привет, пожалуйста, добавьте некоторый комментарий о том, почему это работает.
  • 0
    @stef отредактировал ответ, спасибо!
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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню