分配以及职位增量

Aju*_*ohn -1 javascript operators operator-precedence post-increment

我对输出有些困惑。用Java尝试

var x = 1;
x = x++;
console.log(x); //Its output is 1
Run Code Online (Sandbox Code Playgroud)

我当时认为应该是2.,因为我要在后期增加后进行打印。有什么看法吗?

Una*_*rai 6

这是正确的。分配首先进行,然后递增。比较:

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

console.log(x, y)
Run Code Online (Sandbox Code Playgroud)

  • 在评估了表达式x ++和完成对x =的赋值之间的短暂时间内,x是2。 (2认同)
  • 只需参考官方文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Arithmetic _如果x为3,则++ x将x设置为4并返回4,而x ++返回3,然后才将x设置为4。_(答案在“ **中,而x ++返回3,然后才将x设置为4 **”) (2认同)

Sal*_*n A 6

执行顺序x = x++如下:

  • 计算 x 的旧值 (oldValue = 1)
  • x 的新值是通过将旧值加 1 计算得出的 (newValue = 2)
  • 新值被分配给x。此时x就变成2了!
  • 返回旧值(返回值为 1)。至此评价结束x++
  • 旧值分配给 x。此时x变为1

此处描述了上述规则。规则表明 是在赋值之前x递增,而不是之后递增。