我在阅读this article时遇到了代码(执行 Ctrl + F 搜索Andre Breton
):
//function returning array of `umbrella` fibonacci numbers
function Colette(umbrella) {
var staircase = 0, galleons = 0, brigantines = 1, armada = [galleons, brigantines], bassoon;
Array.prototype.embrace = [].push;
while(2 + staircase++ < umbrella) {
bassoon = galleons + brigantines;
armada.embrace(brigantines = (galleons = brigantines, bassoon));
}
return armada;
}
x = (y = x, z)
构造意味着什么?或者更具体地说,y = x, z
是什么意思?我称它为逗号赋值,因为它看起来像赋值并且有逗号。
In Python,它意味着元组解包(或在这种情况下打包)。这是同样的情况吗?
答案 0 :(得分:19)
这是逗号运算符。
逗号运算符计算其两个操作数(从左到右) 并返回第二个操作数的值。
评估a,b,c,...,n时的结果值将始终为 最右边的表达式的值,但是所有表达式都在 仍然评估链(从左到右)。
因此,在您的情况下,仍将评估分配,但最终值将为bassoon
。
结果:
galleons = brigantines
brigantines = bassoon
armada.embrace(basson)
答案 1 :(得分:8)
var
语法允许多个赋值,因此当您看到以下内容时,您将使用一个var
语句声明多个变量。
var a, b, c;
请注意,此语法不 逗号运算符。
,
可以用作comma operator。它只是评估一系列表达式。因此,当您看到以下语法时,您将看到正在评估的一系列表达式,以及返回的最后一个表达式的返回值。
x = (y = x, z)
在parens中,x
被分配到y
,然后z
被评估并从()
返回并分配给x
。
我建议这种语法不清楚,效果不大。
答案 2 :(得分:8)
逗号操作数计算其所有操作数并返回最后一个操作数。如果我们使用
,这种情况没有区别x = (y = x, z);
或
y = x;
x = z;
它可以带走那行代码。