我正在尝试创建一个递增的函数,直到它达到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
从不递增?
答案 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
正如你所看到的,第二行从来没有效果,因为最后一行会覆盖它。