下面是一道常见的计算题目,最初刚看时,觉得是一个简单的计算题,应该是我学艺不精,得到的结果与在console上得到的不一样。
var a = 3, b = 5;
a = ( a - ( b = ( a = a + b ) - b ) );
>> 0
大家感兴趣的可以看看,解释下
這道題遠沒有看上去那麼簡單,實際上與直譯器的原理有關。
有人說上面那道口算也能算對,那麼看現在這道題:
var a = 3, b = 5;
a = a - ( b = a = a + b ) - b;
答案嘛,自己運行去看啦。
Some Gotchas in Arithmetic Expression Evaluation : JavaScript
把二元運算符看作一個函數,函數的參數從左到右進棧。右邊改變的不會影響左邊已進棧的。
使用逆波蘭表示法就明顯了