在表达式中使用增量运算符时,应用不一致

问题描述 投票:0回答:1

在 JavaScript 中,我们有后缀 (x++) 和前缀 (++x) 增量,就像许多其他 C 派生语法一样。我知道前缀和后缀增量都比加法具有更高的优先级。

因此,如果我们执行以下操作,y 得到值 2,因为 x(作为 1)添加到 x(作为 1),然后 x 递增到 2。

x = 1
y = x + x++

但是,如果我执行以下操作,y 会得到值 3。为什么它不是像其他示例那样为 2?或者相反,如果遵守优先级规则,为什么另一个示例给出 2?

x = 1
y = x++ + x

您可以在以下示例中看到这一点的另一个示例:

在这个例子中 y 的值为 4。但是从语义上来说这里到底发生了什么?我猜因为它先赋值然后递增,x 首先代表 1,所以我们有 1 + 1,然后它递增,接下来我们将它添加到 x(现在是 2),得到 4。

x = 1
y = x + x++ + x

但是,我们就出现了不一致的情况。看看下面的内容,这里的语义是什么?我在 y 中得到的结果是 5,而不是我预期的 6。

x = 1
y = x + ++x + x

这是我认为应该发生的情况首先对 x++ 进行求值,将 x 递增到 2,然后将其添加到第一个 x(现在是 2),得到 4,然后将该值添加到第二个 x,得到 6。但是,当我在 REPL 中尝试此操作时,Y 得到 5 时,情况并非如此。

为什么是5?

javascript semantics
1个回答
0
投票

JavaScript 是严格从左到右计算的。这意味着

+
的左操作数先于右操作数求值。

  • 如果左侧表达式发生变化
    x
    ,则在评估右侧时,此更改将已经可见
  • 如果右侧表达式发生变化
    x
    ,则此变化仅在评估左侧后才会发生
© www.soinside.com 2019 - 2024. All rights reserved.