大学时老师讲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;       // 赋值为


wKioL1kS2GDDdpF-AAAf2f5nhMU465.png-wh_50