1. 程式人生 > >關於前增量與後增量的認識誤區

關於前增量與後增量的認識誤區

i++ ++i 前增量 後增量

大學時老師講C++時說過, x=i++; 與 x=++i 的區別


當時以為很懂了,一個是後增量,一個是前增量

x= i++; 相當於 x=i ; i=i+1;

x=++i ; 相當於 i=i+1; x=i ;

並對這種解釋深信不疑。


近日 微信群看到一則題目,甚是困惑,將我之前的理解給顛覆了

var k=5;
for(var i=0;i<10;i++){
k=k++;
}
console.log(k); // 5
var k=5;
for(var i=0;i<10;i++){
k++;
}
console.log(k); // 15


發現十分費解,k=k++; 不是相當於 k=k ; k=k+1嗎?每循環一次 k 值都變了嗎?

結果竟然沒變!老師講錯鳥?


應該說老師沒講錯,只不過老師只講了個套路,沒並講出內在。原來,

不會說k=k++是先賦值然後加加,

k= k++ 是先加加了,然後賦值的時候賦的是原來的值;

k=++k 也是先加了,然後賦值為加了之後的值


實際上有個臨時變量

k=k++; 相當於
temp=k; // 先用臨時變量保存原值
k=k+1; // 再執行加加
k=temp; // 賦值為


k=++k; 相當於
temp=k; // 先用臨時變量保存原值

k=k+1; // 再執行加加

k=k; // 賦值為


k=a++; 相當於
temp=a; // 先用臨時變量保存原值

a=a+1; // 再執行加加

k=temp; // 賦值為


k=++a; 相當於
temp=a; // 先用臨時變量保存原值

a=a+1; // 再執行加加

k=a; // 賦值為


技術分享

本文出自 “前端開發學習筆記” 博客,謝絕轉載!

關於前增量與後增量的認識誤區