![](/img/trans.png)
[英]Can anybody explain the following JavaScript code from jCarousel?
[英]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.