完全理解 i++ 與 ++i 的區別

var j=0;
for (i=0;i<100;i++){
    j=j++;
}
console.log(j);

image.png

以上的輸出的結果是 0;先看來看看他們的語法定義:spa

前置遞增遞減 ++i / --i

執行前置遞增和遞減操做時,變量的值都是在語句被求值之前遞減遞增的。(在計算機科學領域,這種狀況一般被稱做副效應。)請看下面這個例子。code

let age=29;
let newAge= --age + 2
console.log(age);
console.log(newAge);

clipboard.png

前置遞增遞減遇到有賦值操做時: 先遞減(29-1),再計算表達式的值(28加上2)blog

後置遞增遞減 i++ / i--

後置遞增和遞減與前置遞增和遞減有一個很是重要的區別,即遞增和遞減操做是在包含它們的語句被求值以後才執行的ip

let age=29;
let newAge= age-- + 2
console.log(age);
console.log(newAge);

後置遞增遞減遇到有賦值操做時: 先計算表達式的值(29+2=31),再遞減(29-1)
clipboard.pngrem

他們有什麼區別

先看下面的例子:it

var j=0;
for (i=0;i<100;i++){
    j++;
}
console.log(j);

clipboard.png

var j=0;
for (i=0;i<100;i++){
    ++j;
}
console.log(j);

clipboard.png

能夠看出 沒有賦值等其餘操做時, 其實++i與i++是沒有區別的
可是,當遞增遞減語句中包含其餘操做時:
前置遞增遞減:console

let num1=1;
let num2=2;
let num3=++num1+num2;
let num4=num1+num2;
console.log(num3);
console.log(num4);

clipboard.png
後置遞增遞減:class

let num1=1;
let num2=2;
let num3=num1++ + num2;
let num4=num1+num2;
console.log(num3);
console.log(num4);

clipboard.png
包括上方的age例子 咱們看出一樣的求值,出現了不一樣的結果;
咱們能夠看出 前置遞增使用了遞增後的值(num1 遞增後爲2)同num2相加獲得4;後置遞增使用了遞增前的值(num1爲1)同num2 相加獲得3
至此,咱們就能夠能夠明白文章開始例子中j=j++; 以後循環的值爲何一直是0計算機科學

j=j++;能夠理解爲 j = j 遞增前的值; 而遞增前的值爲0;所以j 每次循環都恆等於0;改成前置遞增則能夠解決這個問題:變量

var j=0;
for (i=0;i<100;i++){
    j=++j;
}
console.log(j);

image.png
牆裂推薦,爲了方便理解在非在必要條件下建議避免書寫i=i++;這樣的賦值語句

相關文章
相關標籤/搜索