Diese Art von Code wird normalerweise von Transpilern (wie Babel) generiert, um modernes JavaScript - das die neuesten Ergänzungen der Spezifikation verwendet - in eine JavaScript-Version zu konvertieren, die allgemeiner unterstützt wird.
Hier ist ein Beispiel, in dem dieses Transpilationsmuster auftritt:
Nehmen wir an, wir haben diesen Originalcode vor der Transpilation:
import {myfunc} from "mymodule";
myfunc();
Um diesen ES5-kompatiblen Code zu erstellen, können Sie Folgendes tun:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Aber hier würden wir myfuncmit mymoduleals thisWert ausführen , was im ursprünglichen Code nicht vorkommt. Und obwohl dies möglicherweise nicht immer ein Problem ist, ist es besser sicherzustellen, dass sich die Funktion genauso verhält wie in der Originalversion , selbst wenn diese Funktion eine thisReferenz verwenden würde - wie ungewöhnlich oder sogar nutzlos diese Verwendung von thisin sein myfunckönnte ( denn auch in der Originalversion wäre es undefined).
Wenn der ursprüngliche Code beispielsweise aufgrund eines this.memberFun()Verweises in der Funktion einen Fehler auslösen würde , wird auch die transpilierte Version ausgegeben.
Hier wird also der Kommaoperator verwendet, um diesen Unterschied zu beseitigen:
(0, mymodule.myfunc)();
Zugegeben, in Code, den Sie selbst schreiben, würden Sie nie einen guten Anwendungsfall für dieses Muster haben, da Sie nicht verwenden würden , thisin myfuncan erster Stelle.
bindMethode bindet. Hier ist es nur eine Kontextänderung. Sie können die Bindung nicht schneiden oder verlieren (die von erstellte Bindungbind).