美文网首页
运算符与表达式的测试

运算符与表达式的测试

作者: 做个有趣的孩纸 | 来源:发表于2020-06-21 16:56 被阅读0次

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

    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
    

    相关文章

      网友评论

          本文标题:运算符与表达式的测试

          本文链接:https://www.haomeiwen.com/subject/esdaxktx.html