代码以什么顺序执行

时间:2018-08-01 22:53:45

标签: javascript

var i = 1;
undefined
console.log(i++ + ++i + i)
VM71:1 7
undefined

我在某处看到了类似的问题,并在开发控制台上进行了尝试。

那么,代码以什么顺序执行 我以为是5 即1 + 2 + 2

1 + 3 + 3是我认为发生的事情。

那么javascript编译器如何执行以下顺序

3 个答案:

答案 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