0

我正在尝试创建一个递增直到达到 3 然后从零开始返回的函数(因此,调用 3 次它会记录0then 。当将1运算符与 pre 和 post fix 运算符一起使用时,我的结果令人困惑。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从不递增?

4

2 回答 2

3

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

i = i++;

不起作用 - 它接受一个值,增加它,然后用最初采用的值覆盖它。另请参阅循环中 i++ 和 ++i 之间的区别?他们是如何工作的。

你可能想写

i = (i + 1) % 3;
于 2015-04-09T11:06:23.413 回答
1

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

i ++

方法:

tmp1 = i
i = i + 1

tmp1是整个操作的结果)。尽管

++ i

方法

i = i + 1
tmp1 = i

这意味着

i = i ++ % 3

实际上是

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

如您所见,第二行永远不会产生影响,因为最后一行会覆盖它。

于 2015-04-09T11:10:19.413 回答