运算符与表达式的测试

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

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

结果类似:(a++)+a 打印出来3

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

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

结果类似:a+(a++) 打印出来4

问题来了, a+++a等同于(a++)+a,而 a+a++等同于a+(a++),二者结果为什么不一样?

过程解析:

      +
    /   \
   /     \
 a        a++

编译器的处理过程:
1. push(a), a入栈(1)
2. push(a++),即push(1),之后 a自增变成2
3. result = pop()+pop(), 出栈两个操作数(1,1)相加,得到2

      +
    /   \
   /     \
  a++     a

编译器的处理过程:
1. push(a++), 即push(1),之后 a自增变成2
2. push(a),即push(2)
3. result = pop()+pop(), 出栈两个操作数(1,2)相加,得到3

你可能感兴趣的:(运算符与表达式的测试)