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
如您所见,第二行没有效果,因为最后一行覆盖了它。
我正在尝试创建一个函数,该函数递增直到达到 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
如您所见,第二行没有效果,因为最后一行覆盖了它。