在循环中递增变量(模数)

Incrementing a variable in a cycle (modulo)

我希望在激活一个函数(称之为update).我已经设法得到 1, 2, 0, 1, 2, 0, … 通过做:

var x = 0;

function update() {
  x = ++x % 3;
}

然后我尝试了 post-increment 运算符,而 x 的值仍然是 0:

var x = 0;

function update() {
  x = x++ % 3;
}

然后这段代码我越想越糊涂。我认为首先完成 0 modulo 3,然后将(0)分配给 x,但是 x 不会递增到 1 吗? (似乎不是,但这不是我想要的——我希望模式从 0 开始。有人能解释一下这段代码是怎么回事以及如何实现从 0 开始的模式吗?

你的第二个代码示例就是这样做的

  1. 存储 x 的旧值
  2. 增量 x
  3. 将 x 的旧值乘以 3 取模
  4. 将 modulus 的结果存储在 x

如果您这样调用,您的第一个代码应该会给出正确的解决方案:

look_at_value()
update()
look_at_value()
update()
...

如果要在查看值之前调用更新,则需要初始化x = -1(或2mod3)

更清晰的代码是:

function update() {
    x = (x+1) % 3;
}