i++是先赋值,再自增;++i是先自增再赋值。 如何理解?直接看代码。
i++:
let i = 1
let b = i++ //i在还没自增的时候就先赋值给b,所以b的值为1,赋值后i再自增为2,此时i的改变已经不影响b的值了
console.log(i,b) // 2,1
++i:
let i = 1
let b = ++i //i先自增到2,自增完成后再把2赋值给b
console.log(i,b); //2,2
好,相信你已经理解了i++和++i的区别了,再来看这道题:
let i = 1
let b = ++i + i
console.log(i,b); // 2,4
分析:++i先自增再赋值,所以i先自增到2,再赋值给b,等等b还没运算完,还要再加一个i,i此时已经是2了,所以b的结果应该是4。(运算过程为b先被赋值为2,再加2)。
再来看另外一道题:
let i = 1
let b = i++ + i
console.log(i,b); // 2,3
分析:i先赋值再自增,i等于1 的时候赋值给b,此时b的值为1,i再自增到2,等等,b的运算还没算完,还要再加一个i,此时i已经是2了,所以b最终结果为3。(运算过程为b先被赋值为1,再加2)
解题关键:假设b=1+2+3;运算过程应该是b先等于1;b再等于b+2,此时b等于3;b再等于b+3,b此时最终等于6。而不是先把1+2+3算出来等于6,再把6赋值给b
扩展:
let a = 1
a += a++
let b = 1;
b = b + b++
let c = 1
c = c++ + c
console.log(a,b,c); //2,2,3