Questo tipo di codice viene in genere generato dai transpiler (come Babel), al fine di convertire i moderni JavaScript - che utilizzano le aggiunte più recenti alle specifiche - in una versione JavaScript maggiormente supportata.
Ecco un esempio in cui si verifica questo modello di transpilazione:
Diciamo che abbiamo questo codice originale prima della transpilation:
import {myfunc} from "mymodule";
myfunc();
Per rendere questo codice compatibile ES5, è possibile effettuare ciò:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Ma qui vorremmo eseguire myfunccon mymodulecome thisvalore, che non sta accadendo nel codice originale. E anche se questo potrebbe non essere sempre un problema, è meglio assicurarsi che la funzione si comporti esattamente come nella versione originale , anche se quella funzione userebbe un thisriferimento - quanto potrebbe essere insolito o addirittura inutile l'uso di thisin myfunc( perché anche nella versione originale sarebbe undefined).
Quindi, ad esempio, se il codice originale this.memberFun()generasse un errore a causa di un riferimento nella funzione, verrà anche lanciato nella versione traspilata.
Quindi è dove l'operatore virgola viene utilizzato per sbarazzarsi di quella differenza:
(0, mymodule.myfunc)();
Certo, nel codice che scrivi tu stesso, non avresti mai un buon caso d'uso per questo modello, poiché non lo utilizzeresti thisin myfuncprimo luogo.
bindil metodo si lega. Qui è solo un cambio di contesto. Non puoi tagliare o perdere il legame (il legame creato dabind).