大学时老师讲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; // 赋值为新值
时间: 2024-10-12 16:11:30