为什么这段代码输出3而不是2?
var i = 1;
i = ++i + --i;
console.log(i);
我期待:
++i // i == 2
--i // i == 1
i = 1 + 1 // i == 2
我犯了错误?
答案 0 :(得分:10)
更改按以下顺序进行:
i
(至2)i
作为加法(2)i
(至1)i
作为加法(1)i
(3) ...并且看到您尝试这样做,让我对JSLint不喜欢++
和--
的原因有所了解。
答案 1 :(得分:3)
以这种方式看待它
x =(某事)
x =(++ i)+(某事)
x =(2)+(某事)
x =(2)+( - i)
x =(2)+(1)
这些术语从左到右进行评估,一旦第一个++ i被评估,当你用--i改变它的值时,它将不会被重新评估。
答案 2 :(得分:2)
你的第二行是加2 + 1.
按顺序,解释器将执行:
++i // i == 2
+
--i // i == 1
i = 2 + 1
答案 3 :(得分:0)
++i
等于2,` - i'等于1. 2 + 1 = 3.
答案 4 :(得分:0)
你的操作顺序有点偏差。这是怎么回事:
答案 5 :(得分:0)
因为当你使用++ i时,i的值会增加然后返回。但是,如果使用i ++,则返回i的值,然后递增。 Reference
答案 6 :(得分:0)
++$a Increments $a by one, then returns $a.
$a++ Returns $a, then increments $a by one.
--$a Decrements $a by one, then returns $a.
$a-- Returns $a, then decrements $a by one.
答案 7 :(得分:0)
因为您希望此代码像是一个引用对象一样工作,并且在一元操作完成之前不会收集这些值。但是在大多数语言中,首先计算表达式,所以我返回i的值,而不是我自己。
如果你有++( - i)那么你就是对的。
简而言之,不要这样做。
该操作的结果在每种语言/编译器/解释器中的定义都不相同。因此,虽然它会在JavaScript中生成3
,但可能会在其他位置导致2
。