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

Javascript 在循环中递增变量(模),javascript,increment,Javascript,Increment,我希望在激活函数(称之为update)时,通过模式0、1、2、0、1、2…循环变量的值(称之为x)。通过执行以下操作,我成功地获得了1,2,0,1,2,0,…: var x = 0; function update() { x = ++x % 3; } 然后我尝试了后增量运算符,而x的值保持为0: var x = 0; function update() { x = x++ % 3; } 然后我越想这个代码,我就越困惑。我认为0模3是先完成的,然后(0的)赋值到x,但是x没有增加

我希望在激活函数(称之为
update
)时,通过模式0、1、2、0、1、2…循环变量的值(称之为
x
)。通过执行以下操作,我成功地获得了1,2,0,1,2,0,…:

var x = 0;

function update() {
  x = ++x % 3;
}
然后我尝试了后增量运算符,而
x
的值保持为0:

var x = 0;

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

然后我越想这个代码,我就越困惑。我认为0模3是先完成的,然后(0的)赋值到
x
,但是
x
没有增加到1?(看起来不是,但无论如何这不是我想要的-我希望模式从0开始。有人能解释一下这段代码是怎么回事以及如何实现从0开始的模式吗?

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

  • 存储x的旧值
  • 增量x
  • 将x的旧值乘以3
  • 将模数结果存储在x中
  • 如果您这样称呼它,那么您的第一个代码应该为您提供正确的解决方案:

    look_at_value()
    update()
    look_at_value()
    update()
    ...
    
    如果要在查看值之前调用update,则需要初始化
    x=-1
    (或2 mod 3)

    更明确的准则是:

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

    简单地做
    x=(x+1)怎么样%3;
    ?我觉得写
    x=x++
    真的很奇怪……因为从逻辑上讲,
    x++
    将被执行,它将返回
    x
    的上一个值,并将其赋给
    x
    ,它的初始值,所以对我来说,
    x=x++%3
    应该与
    x=x%3
    相同。