Es ist die comma operator. Es führt eine Reihe von Ausdrücken der Reihe nach aus und gibt dann das Ergebnis der letzten von ihnen zurück. Genau das mag:
myfunc();
myobj.myvar = someobj.prop;
return myobj;
Einige Leute wirklich lieber Dinge auf einer Linie zu tun, auch wenn es keinen objektiven Grund zu. Es gibt keinen Vorteil in dem Beispiel, das Sie gegeben haben, und tatsächlich ist es verwirrend, weil es so aussieht, als ob die ersten zwei Bits mit dem Wert zusammenhängen, der letztendlich zurückgegeben wird, was nicht der Fall ist.(ich schrieb, dass, bevor Sie uns gesagt, dass es Code minimiert wurde, natürlich, ist unklar ist für die Menschen nur ein Problem im Quellcode, minimierte Code nicht.)
Da Sie es ein minifier gesagt haben: Die sehr klein Der mögliche Vorteil, den der Minifier dort haben könnte, ist, wenn dies Teil eines bedingten Blocks ist: Er kann ein oder zwei Zeichen speichern. Wenn wir die lange Form sah wie folgt annehmen:
if (someCondition) {
myfunc();
myobj.myvar = someobj.prop;
return myobj;
}
... mit dem Komma-Operator kann der minifier dies tut (63 Zeichen):
if(someCondition)return myfunc(),myobj.myvar=someobj.prop,myobj
... eher als diese (65 Zeichen):
if(someCondition){myfunc();myobj.myvar=someobj.prop;return myobj}
..., ohne die Funktionalität des Codes zu ändern, wenn was folgt ein }
oder ein anderes geeignetes Zeichen (oder End-of (Datei), um am Ende automatic semicolon insertion auszulösen. Sonst würde es die ;
auf der ersten benötigen, aber das spart immer noch ein Zeichen.
Gibt es eine Reihe von Argumenten zurückgeben; Wie kann man die Parameter in einem Funktionsaufruf überladen? –
"Was ist das Muster profitieren?" - Es hat keinen. Es ist verwirrender, nicht-idiomatischer Code. – Quentin
Ich kann keinen Grund sehen ... Es legt sogar mehr Objekte auf den Stapel als wenn es drei normale Anweisungen gäbe ... –