【问题标题】:Assignment along with Post increment分配以及发布增量
【发布时间】:2019-08-26 04:08:24
【问题描述】:

我对输出有点困惑。在 Javascript 中尝试过

var x = 1;
x = x++;
console.log(x); //Its output is 1

我认为它是 2。因为我在后增量之后进行打印。有什么看法吗?

【问题讨论】:

  • post-increment 中的post 表示它首先返回当前值,post 会增加变量。然后您将返回的值分配回变量......
  • 这是因为您将x++ 的值分配回xx++ 返回x 的值之前 增量,而++x 返回值之后。这是唯一的区别。
  • 这能回答你的问题吗? Postfix and prefix increments in JavaScript

标签: javascript operators operator-precedence post-increment


【解决方案1】:

没错。先赋值,再递增。 比较:

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

console.log(x, y)

【讨论】:

  • 所以后增量从未发生过?
  • 不,确实如此——赋值后它的值被改变了,也就是说如果x = 5++,那么x就是5,但是值还是加了1,但不是存储在x
  • x2 在表达式 x++ 被评估和分配给 x = 已经完成之间的短暂时刻......
  • 请参考官方文档:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… 如果 x 为 3,则 ++x 将 x 设置为 4 并返回 4,而 x++ 返回 3,然后才将 x 设置为4.(答案在“而 x++ 返回 3,然后才将 x 设置为 4”部分)
  • 你可以想象++是这样的:function ++(x) { var tmp = x; x += 1; return tmp; }...
【解决方案2】:

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

  • 计算 x 的旧值 (oldValue = 1)
  • x 的新值是通过将旧值加 1 来计算的 (newValue = 2)
  • 为 x 分配了新值。 此时 x 变为 2!
  • 返回旧值(返回值为 1)。 x++的评测到此结束
  • 旧值分配给 x。 此时 x 变为 1

以上规则are described here。规则表明x 是在分配之前而不是之后增加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多