gpt4 book ai didi

javascript - 在语句中多次修改变量以及 JavaScript 中函数参数的求值顺序

转载 作者:行者123 更新时间:2023-11-30 17:28:21 24 4
gpt4 key购买 nike

我们如何推理这些 JavaScript 语句并解释它们的输出?

  1. i = 1;我=我++;控制台日志(一);//在 Firefox 中输出 1
  2. i = 1; x = i++ + i++; console.log(i, x);//在 Firefox 中输出 3 3
  3. i = 1;控制台日志(我,我++);//在 Firefox 中输出 1 1

在 C 语言中,(1) 和 (2) 的等效语句会调用未定义的行为,因为我们在两个序列点之间多次修改 i 的值。在 C 语言中,(3) 的等效语句可以说是调用未定义的行为,因为函数参数的求值顺序是未定义的。 JavaScript 中的规则是什么?

最佳答案

根据 ECMA 5.1 Specification of Postfix Increment Operator ,

  1. Let lhs be the result of evaluating LeftHandSideExpression.
  2. Let oldValue be ToNumber(GetValue(lhs)).
  3. Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 11.6.3).
  4. Call PutValue(lhs, newValue).
  5. Return oldValue.

按照规则,让我们计算表达式

i = i++

该值将递增并设置在 i 中。按照第 4 步和第 5 步。然后返回 oldValue 1 本身,您将它再次存储在 i 中。这就是你得到 1 的原因。

x = i++ + i++

同理。 i++ 的计算结果为 1 并且 i 设置为 2。现在,下一个 i++ 的计算结果为 2 i 的值设置为 3。因此 1 和 2 的和被分配给 x。这就是它打印 3 3

的原因

console.log(i, i++)

同样的逻辑。 i 为 1,i++ 的计算结果为 1,但该值仅设置为 2。这就是它打印 1 1

的原因

关于javascript - 在语句中多次修改变量以及 JavaScript 中函数参数的求值顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23741716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com