如题,不太明白js哪里出了问题。
#include <stdio.h>
int main(void)
{
int a=3;
a+=a-=a*a;
printf("%d",a);
return 0;
}
C运行环境: GCC 9.3.0
在线调试链接: https://wandbox.org/permlink/...
var a=3;
console.log(a+=a-=a*a);
JavaScript运行环境: Node.js 14.0.0
在线调试链接: https://wandbox.org/permlink/...
C 的执行可以通过生成 assembly 来分析
见上面的注释。可以把 eax 和 ecx 看成是临时变量就好理解了。
即
关键在于 C 语言从右向左执行完第一个赋值语句时,a 已经是 -6,而 js 是把连续赋值当成一个表达式来执行。中间少了对 a 赋值的过程。
即 js 的执行过程可以理解成:
而 c 语言则是两阶段引入变量