JS-后置运算符 作业

214 阅读1分钟

1.对于如下代码,结果是多少?

let a = 1
console.log( a+++a )

2.对于下面的代码,结果又是多少?

let a = 1
console.log( a+a++ )

问题来了, a+++a等同于(a++)+a,而 a+a++等同于a+(a++),二者结果为什么不一样? 搜索相关文章,写篇文章讲解二者差异。

答:

1.
let a = 1
console.log( a+++a )
// 后置递增运算符,原理是:先返回值 后自加1

      +
    /   \
   /     \
  a++     a

编译器的处理过程:
1. push(a++), 即push(1),之后 a自增变成2 // 后置:先原值运算,后自加 ,所以a++的值为1,a 自加1,所以a =2
2. push(a),即push(2) // 后面运算后面的a,由于前面a++的运算,得出a=2,所以带入进去,a=2
3. result = pop()+pop(), 出栈两个操作数(1,2)相加,得到3 // (a++)+a 的结果为 1 +2 =3


2.
let a = 1
console.log( a+a++ )

      +
    /   \
   /     \
 a        a++

编译器的处理过程:
1. push(a), a入栈(1) // 因为a+(a++),a的值没有发生改变 ,所以a =1
2. push(a++),即push(1),之后 a自增变成2 // a++ = 1 ,a=2
3. result = pop()+pop(), 出栈两个操作数(1,1)相加,得到2 //a+(a++) 等于 1 + 1 所以结果为2