JavaScript中a++,++a如何理解?

355 阅读2分钟

a++与++a

先来看一段代码

    var a=1;
    var b=a++;
    console.log(b); //1
    console.log(a); //2
    a=1;
    b=++a;
    console.log(b); //2
    console.log(a); //2

为什么++a和a++输出结果不同?为什么再次输出a结果却一样?

首先,我们要了解:++a和a++的作用都是给a加上1,但是它们的执行顺序不一样

  • a++:执行表达式后再进行自增运算,返回的a为a+1
  • ++a:进行自增运算后再执行表达式,返回的a为a+1

上面代码的a++,先将a赋值给了b,此时a还未自增运算,因此输出为1;至于++a,则是a先进行了自增,再赋值给b,因此输出了2。

a+++a与a+a++

下面再看一段代码

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

它会输出什么呢? 按照上面写的,应该是a++得到1,此时a++还没执行完整个表达式,a还未自增运算,因此上面表达式输出值是2,同理可得下面输出值也是2。但事实是上面表达式输出值为3,下面表达式输出值为2。

这是编译器的问题

  • 计算a+++a时,按照计算从左至右的顺序,先push(a++),相当于push(1),a自增成2可以想象成push(a++),a++就相当于一个独立的表达式,它执行完这个表达式后进行自增运算,因此在编译器里a已经进行自增得到2,接着push(a),相当于push(2),最后pop()出两个操作数,得到pop()+pop(),即是1+2=3;
  • 计算a+a++时,按照计算从左至右的顺序,先push(a),相当于push(1),接着push(a++),相当于push(1)之后a自增为2,最后pop()出两个操作数,得到pop()+pop(),即是1+1=2;