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
咱們開發中須要記住的是:前置型是先計算再返回數值,後置型是先返回數值再計算。