繁体   English   中英

解释以下 JavaScript 代码的输出似乎与预期不同

[英]Explain the output of the following code in JavaScript which seems different from expected

下面的 JavaScript 代码应该给出32 的输出,但答案是16 如何?

5 + 1 = 6;
6 + 5 = 11;
11 * 2 = 22;
22 + 10 = 32; (should have been answer as per me)

 var x = 5; x = (x++, alpha(x), x*2, x+10); function alpha(x){ return x+5; } console.log(x);

alpha(x)函数是纯函数,没有副作用,而且由于它不是逗号运算符的最后一项,因此它什么也不做:您不妨将其完全删除。 对于x * 2部分也可以这样说。 所以,你的代码相当于

 var x = 5; x = (x++, x+10); console.log(x);

x++ x加 1,因此x从 5 到 6。然后x + 10计算结果为 16。

使用逗号运算符,整个表达式解析为右侧的值,在最后一个, 另一种看待它的方式:

var x = 5;
x = (x++, alpha(x), x*2, x+10);
function alpha(x){
   return x+5;
}
console.log(x); 

相当于

 var x = 5; // comma operator translation starts here x++; // Increments x; now x is 6 alpha(x); // Unused expression, doesn't do anything x * 2; // Unused expression, doesn't do anything x = x+10; // Adds 10 to x, assigns result to x; x is now 16 // comma operator translation ends here function alpha(x){ return x+5; } console.log(x);

这条线不会做你认为它做的事情。

x = (x++, alpha(x), x*2, x+10);

在四个表达式中,只有一个对x执行任何操作: x++递增x (在这种情况下从 5 到 6)。 其他表达式只是坐在那里什么都不做的值。 这和你写的完全一样:

x = (x++, 11, 12, 16)

(因为x++将 x 变成 6,所以alpha(x)返回 6+5=11,x*2 是 6*2,即 12,而 x+10 是 6+10,即 16。)

因此,您将列表(而不是数组)分配给单个变量。 在这种情况下会发生什么? 它获取列表中的最后一个值,其他值被丢弃。 在本例中,最后一个值为 16,因此x设置为 16。

如果您想对x进行所有数学运算,则必须沿途将所有值实际分配回x

x++
x = x + 5
x = x * 2
x = x + 10

或者将所有操作合并为一个表达式:

x = ((x+1)+5)*2+10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM