改变固有思维的计算题

下面是一道常见的计算题目,最初刚看时,觉得是一个简单的计算题,应该是我学艺不精,得到的结果与在console上得到的不一样。
vara=3,b=5;
a=(a-(b=(a=a+b)-b));
>>0
大家感兴趣的可以看看,解释下
這道題遠沒有看上去那麼簡單,實際上與直譯器的原理有關。
有人說上面那道口算也能算對,那麼看現在這道題:
vara=3,b=5;
a=a-(b=a=a+b)-b;
答案嘛,自己運行去看啦。
SomeGotchasinArithmeticExpressionEvaluation:JavaScript
慕码人8056858
浏览 281回答 2
2回答

潇潇雨雨

楼主的问题可以总结为“子表达式的副作用如果改变表达式其他变量,会发生什么事情?”实际上除了赋值语句以外,子表达式包含++和--、函数调用也可以达到类似效果。另外,函数调用时,一个参数的表达式也可能影响到另一个参数。问题的答案依赖于参数的求值顺序。有些语言是不在标准中规定求值顺序,因此规范给出的答案是undefinedbehavior,具体的答案依赖于编译器或解释器,如C++11前的C++。至于JavaScript,是严格从左到右求值的(有括号则优先求子表达式的值),因此,只要注意运算符的优先级,并在遇到赋值号时修改变量的值,就得到答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript