我无法理解后缀和前缀增量在这样的表达式中的工作原理:
var x = 1;
x = ++x + x++ * x
为什么浏览器控制台返回 8 ?
从左到右评估:
++x : x is now 2
++x + : 2 +
++x + x : 2 + 2
++x + x++ : 2 + 2 and x is now 3
++x + x++ * : 2 + 2 *
++x + x++ * x : 2 + 2 * 3
var x = 1; x = ++x + x++ * x
按照
++x => 2 (After pre-fix's updated value)
x++ => 2 (Post-fix will update in second sequence not now)
x => 3 (After post-fix's updated value)
所以
x = 2 + 2 * 3
按照优先级乘法 它会
x = 2 + 6
因此
x = 8
您可以在这个网站了解更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment 原因如下:
由于乘法总是首先计算,因此我们将 x++ 乘以 x。请记住,x 的值为 2。
这就是数学表达式的样子:
x = 1;
x = 1+1+2+1*3
我们将 x++ 乘以 x。请记住,x 是 2。所以它看起来像这样:
x = 1+1 +(2+1{2})
现在我们将计算括号内的数字。
2+1*2 = 6
之后,我们可以将 2 加 6 得到 8。
2+6=8
这就是原因。
x = ++x + (x++ * x)
将其视为数学运算,从左到右。
++x = x is now 2
x++ = x is now 3 but the showed value remains 2
x = is 3
x = 2 + (2 * 3)
x = 8
按照运算符优先顺序执行并返回值,步骤如下:
++x => 2 // returns current value after increment
x++ => 2 // returns old value, here old value is 2 because already increment before
x++ * x => 2 * 3 => 6 // x returns stored current value after 2 times increment
++x + 6 => 2 + 6 => 8 // Output is 8
注意 ++x 和 x++ 都将变量加 1 并将值存储到变量(x)。但这里有一个简单的区别 ++x(前缀增量运算符)返回当前值,而 x++(后缀增量运算符)返回旧值。
前缀(++变量) 当 ++ 运算符在变量之前使用时,它会在表达式中使用该值之前递增变量的值
let a = 5;
let b = ++a; // a is incremented to 6, then b is assigned the value of 6
console.log(a); // 6
console.log(b); // 6
后缀(变量++) 当 ++ 运算符在变量之后使用时,它会在表达式中使用该值后递增变量的值。
let a = 5;
let b = a++; // b is assigned the value of 5, then a is incremented to 6
console.log(a); // 6
console.log(b); // 5