请输入代码
var iNow=0;
var iTimer=setInterval(auto, 1000);
function auto () {
iNow=(iNow++)%3;
console.log(iNow);
}
请问大家,为什么输出的都是0,而不是1 2 0 1 2..这样循环呢?求解答。
把++放在iNow反而就可以顺利输出 1 2 0 1 2..
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为
(iNow++)的结果是0,然后(iNow++)%3当然还是0。然后通过赋值语句把0给了iNow这个名字指向的内存地址。所以,不论你循环多少次都是0。
++实际上也起作用了,但是马上被赋值运算覆盖了。
关键点就是:
另外,关于++a和a++表达式的区别是:前者返回自增后的值,后者返回自增前的值。
由于容易出错,所以尽量不要在某个变量出现了多次的表达式里面对这个变量进行自增或自减操作。
manxisuo 的回答很精简,也非常全面。
这里就借用犀牛书里的一段话吧。
递增“++”
运算符的返回值依赖于它相对于操作数的位置。
当运算符在操作数之前,称为“前增量”(pre-increment)运算符,它对操作数进行增量计算,*并返回计算后的值*。
当运算符在操作数之后,称为“增量”(post-increment)运算符,它对操作数进行增量计算,但返回未做增量计算的值。
代码大致相当于如下:
iNow++, 会让iNow的值先参与运算,然后在加1++iNow, 会让iNow的值先加1,然后参与运算改正如下,使用另外一个变量接收计算结果
因为iNow++的结果是0