Ce type de code est généralement généré par des transpilateurs (comme Babel), afin de convertir du JavaScript moderne - qui utilise les ajouts les plus récents à la spécification - en une version JavaScript plus largement prise en charge.
Voici un exemple où ce modèle de transpilation se produit:
Disons que nous avons ce code original avant la transpilation:
import {myfunc} from "mymodule";
myfunc();
Pour créer ce code compatible ES5, vous pouvez procéder comme suit:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Mais ici, nous exécuterions myfuncavec mymodulecomme thisvaleur, ce qui ne se produit pas dans le code d'origine. Et bien que cela ne soit pas toujours un problème, il est préférable de s'assurer que la fonction se comporte exactement comme elle le ferait dans la version d'origine , même si cette fonction utiliserait une thisréférence - à quel point inhabituel ou même inutile cette utilisation de thisin myfuncpourrait être ( parce que ce serait aussi dans la version originale undefined).
Ainsi, par exemple, si le code d'origine génère une erreur en raison d'une this.memberFun()référence dans la fonction, il renvoie également la version transpilée.
Donc, c'est là que l'opérateur virgule est utilisé pour se débarrasser de cette différence:
(0, mymodule.myfunc)();
Certes, dans le code que vous écrivez vous - même, vous auriez jamais un bon cas d' utilisation pour ce modèle, comme vous ne l' utiliser thisdans myfuncen premier lieu.
bindla méthode se lie. Ici, c'est juste un changement de contexte. Vous ne pouvez pas couper ou perdre la liaison (le lien créé parbind).