Javascript:为什么前缀运算符与模数一起使用而不是后缀运算符?

Javascript: Why does prefix operator work with modulus but not postfix operator?

我正在尝试创建一个函数,该函数递增直到达到 3,然后从零开始返回(因此,调用三次它将记录 0 然后 1 然后 2 . 将 % 运算符与 pre 和 post fix 运算符一起使用时,我得到了令人困惑的结果。

这是我的两个函数:

var i, j = 0, 0
function run () { 
  console.log(i); 
  i = i++ % 3;
 } // Called three times logs 0, 0, 0

function newRun () {
  console.log(j);
  j = ++j % 3;
} // Called three times it logs 0, 1, 2

为什么前缀运算符起作用而 postfix 不起作用(即在第一个函数中为什么 i 从不递增?

这与模运算符没有任何关系。甚至

i = i++;

不起作用 - 它获取一个值,递增它,然后用最初获取的值覆盖它。另请参阅 Difference between i++ and ++i in a loop? 了解它们的工作原理。

你可能想写

i = (i + 1) % 3;

在使用前缀和后缀运算符时,最好记下实际执行的代码。

i ++

表示:

tmp1 = i
i = i + 1

tmp1是整个运算的结果)。 而

++ i

表示

i = i + 1
tmp1 = i

也就是说

i = i ++ % 3

实际上是

tmp1 = i
i = i + 1
i = tmp1 % 3

如您所见,第二行没有效果,因为最后一行覆盖了它。