L'opérateur virgule évalue chacun de ses opérandes (de gauche à droite) et renvoie la valeur du dernier opérande.
console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console
Alors, voyons un exemple:
var a = {
foo: function() {
console.log(this === window);
}
};
a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console
Maintenant, dans la foométhode, thisest égal à a(car fooest attaché à a). Donc, si vous appelez a.foo() directement, il se connectera falseà la console.
Mais, si vous étiez appelé (0, a.foo)(). L'expression (0, a.foo)évaluera chacun de ses opérandes (de gauche à droite) et retournera la valeur du dernier opérande. En d'autres termes, (0, a.foo)équivaut à
function() {
console.log(this === window);
}
Puisque cette fonction n'est plus attachée à rien, thisc'est l'objet global window. C'est pourquoi il se connecte trueà la console lors de l'appel (0, a.foo)().
_b.a.call()pour que l'intention soit claire.