var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4)
将四个数分别打印是多少?javascript
var num1 = 2; var num2 = 20; var num3 = num1-- + num2; var num4 = num1 + num2; console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4)
这段代码运行以后将四个数分别打印又是多少?html
若是你能果断地说出答案而且能自圆其说,那也就不必继续看下去了。java
咱们都知道,JavaScript中的递增运算符是 ++,递减运算符是 --。简单来讲,递增运算符就是将变量+1,递减运算符就是让变量-1,但是前置和后置结果是不同的,也是很容易混淆的。sass
前置型简单理解就是先计算再赋值。例如post
var a = 1; var b = ++a; console.log(a); //2 console.log(b); //2
上面的表达式也能够理解为:3d
var a = 1; a = a + 1; var b = a;
后置型简单理解就是先赋值再计算。例如code
var a = 1; var b = a++; console.log(a); //2 console.log(b); //1
上面的表达式也能够理解为:htm
var a = 1; var i = a; a = a + 1; var b = i;
前置和后置型运算符之因此有上面的区别,是由于运算符的优先级。在各运算符按照优先级的不一样由高到低排列顺序中:ip
因此,++和--会优先于=执行。可是这边我本身也还有个疑问,前置型的还能够用优先级解释,可是后置型的怎么解释呢,讲道理它也比=的优先级高啊,这个我还有点疑问。开发
而后根据MDN上对递增(++)的解释:
根据这个解释,在例子中
var a = 1; console.log(a++) //1
a++其实是等于a递增以前的数值的,也就是1,这个在开发中容易被忽略,要谨记。
回到最上面的代码,第一段代码分别会打印:1-20-21-21,第二段代码会打印:1-20-22-21
咱们开发中须要记住的是:前置型是先计算再返回数值,后置型是先返回数值再计算。