var i = 1;
undefined
console.log(i++ + ++i + i)
VM71:1 7
undefined
我在某处看到了类似的问题,并在开发控制台上进行了尝试。
那么,代码以什么顺序执行
我以为是5
即1 + 2 + 2
1 + 3 + 3
是我认为发生的事情。
那么javascript编译器如何执行以下顺序
答案 0 :(得分:2)
您可以查看operator precedence here的详细信息,但本质上发生的事情是i ++将求值为1,然后递增,所以我将为2,然后++ i将首先递增,因此求值为3 ,那么我是3,所以您得到1 + 3 + 3,因为前和后修复增量在添加之前完成。
答案 1 :(得分:2)
operator precedence的规则定义明确。后缀增量在表达式中使用的三个运算符中具有最高优先级:
Precedence | Operator | Syntax
17 | Postfix Increment | … ++
16 | Prefix Increment | ++ …
13 | Addition | … + …
因此,按顺序执行以下步骤:
((i++) + (++i)) + i // i === 1
( 1 + (++i)) + i // i === 2, postfix increment
( 1 + 3 ) + i // i === 3, prefix increment
4 + 3 // i === 3, addition
7 // i === 3, addition
答案 2 :(得分:1)
从左到右进行评估:
(i++ + ++i + i)
i++
的值为1,并且i
递增。++i
的值为3,并且i
递增。i
的值为3。优先级确定具有操作符的操作数的分组,而不是评估顺序。例如,i + i + ++i
不会在添加之前增加i
。