var j=0; for (i=0;i<100;i++){ j=j++; } console.log(j);
以上的輸出的結果是 0;先看來看看他們的語法定義:spa
執行前置遞增和遞減操做時,變量的值都是在語句被求值之前遞減遞增的。(在計算機科學領域,這種狀況一般被稱做副效應。)請看下面這個例子。code
let age=29; let newAge= --age + 2 console.log(age); console.log(newAge);
前置遞增遞減遇到有賦值操做時: 先遞減(29-1),再計算表達式的值(28加上2)blog
後置遞增和遞減與前置遞增和遞減有一個很是重要的區別,即遞增和遞減操做是在包含它們的語句被求值以後才執行的ip
let age=29; let newAge= age-- + 2 console.log(age); console.log(newAge);
後置遞增遞減遇到有賦值操做時: 先計算表達式的值(29+2=31),再遞減(29-1)
rem
先看下面的例子:it
var j=0; for (i=0;i<100;i++){ j++; } console.log(j);
var j=0; for (i=0;i<100;i++){ ++j; } console.log(j);
能夠看出 沒有賦值等其餘操做時, 其實++i與i++是沒有區別的
可是,當遞增遞減語句中包含其餘操做時:
前置遞增遞減:console
let num1=1; let num2=2; let num3=++num1+num2; let num4=num1+num2; console.log(num3); console.log(num4);
後置遞增遞減:class
let num1=1; let num2=2; let num3=num1++ + num2; let num4=num1+num2; console.log(num3); console.log(num4);
包括上方的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);
牆裂推薦,爲了方便理解在非在必要條件下建議避免書寫i=i++;這樣的賦值語句