let a = 1;
a = a++;
console.log(a); // 1
上述代码按理说a应该等于2,因为a++最后总会加一,应该等于2;即不论是a=a++还是a=++a,最后a都应该等于2;在C语言中验证这两种写法都等于2;但js中a=a++最后a却等于1,是什么原因呢?
换种写法
b = a++;最后a就是等于2的,疑惑
let a = 1;
a = a++;
console.log(a); // 1
上述代码按理说a应该等于2,因为a++最后总会加一,应该等于2;即不论是a=a++还是a=++a,最后a都应该等于2;在C语言中验证这两种写法都等于2;但js中a=a++最后a却等于1,是什么原因呢?
换种写法
b = a++;最后a就是等于2的,疑惑
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
先看个 JavaScript 的例子
运行结果:
大概过程是,先缓存了
a
的值,然后执行a++
,然后把缓存的a
值赋给a
。既然题主提到多种语言,所以尝试了一下
1
,和 JS 一致1
,和 JS 一致2
所以实际上只有 C++ 的结果不同,估计跟 C++ 编译后运行时可能使用了寄存器,由于
a
是直接在寄存器中进行的 INC 操作,没有缓存之前的值 —— 当然这个是猜测,希望有条件/能力的朋友可以反编译出来研究一下。