下面是一道常见的计算题目,最初刚看时,觉得是一个简单的计算题,应该是我学艺不精,得到的结果与在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
2 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
楼主的问题可以总结为“子表达式的副作用如果改变表达式其他变量,会发生什么事情?”实际上除了赋值语句以外,子表达式包含++和--、函数调用也可以达到类似效果。另外,函数调用时,一个参数的表达式也可能影响到另一个参数。问题的答案依赖于参数的求值顺序。有些语言是不在标准中规定求值顺序,因此规范给出的答案是undefinedbehavior,具体的答案依赖于编译器或解释器,如C++11前的C++。至于JavaScript,是严格从左到右求值的(有括号则优先求子表达式的值),因此,只要注意运算符的优先级,并在遇到赋值号时修改变量的值,就得到答案。
添加回答
举报
0/150
提交
取消