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

时间:2015-04-09 11:03:15

标签: javascript modulus postfix-operator prefix-operator

我正在尝试创建一个递增的函数,直到它达到3然后从零开始(因此,调用三次它会记录0然后1然后2。使用%运算符和前后修复运算符,我的结果令人困惑。

以下是我的两个功能:

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

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

2 个答案:

答案 0 :(得分:3)

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

i = i++;

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

你可能想写

i = (i + 1) % 3;

答案 1 :(得分:1)

使用pre-andfix运算符时,记下实际执行的代码通常很好。

i ++

表示:

tmp1 = i
i = i + 1

tmp1是整个操作的结果)。 而

++ i

装置

i = i + 1
tmp1 = i

这意味着

i = i ++ % 3

实际上是

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

正如你所看到的,第二行从来没有效果,因为最后一行会覆盖它。