记一道很有意思的题目

今天看到一个很有意思的题,题目是这样的:

var i = 1;
console.log(i++ * (i++ + 1));
//输出第二个的时候,把第一个输出注释掉
console.log((i++ + 1) * i++);

答案是: 3 和 4
那么现在,我们去分析这个题目
首先,在JavaScript中运算符是有一个优先级存在(所有变成语言都有)。

如果想要看具体运算符优先级可以去这里看
https://www.cainiaojc.com/javascript/operator_precedence.html

在上面这个题目中,优先级最高的是 (),其次是 ++ 然后是+ 最后是 *
有了优先级的高低就可以将其打包成块来计算
第二 , 计算机在运算程序时,是从上到下,从左到右进行运行这样运算的顺序就有了
最后,就是 ++ 的计算方法了,
i++ 可以表达成 先计算,再累加
++i 是先累加再计算
好了,有以上的基础之后,就可以去计算这道题了:
var i = 1 ,则 i++ * (i++ + 1) 从左向右 进入计算的 i=1,之后进行累加,那么括号中的 i 进入计算的就是 2,所以就变成了 1 * (2+1) 结果就为 3了

以此类推,console.log((i++ + 1) * i++);中为4 就比较好理解了。

你可能感兴趣的:(记一道很有意思的题目)