L'operatore virgola valuta ciascuno dei suoi operandi (da sinistra a destra) e restituisce il valore dell'ultimo operando.
console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console
Quindi, vediamo un esempio:
var a = {
foo: function() {
console.log(this === window);
}
};
a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console
Ora, nel foometodo, thisè uguale a a(perché fooè attaccato a a). Quindi, se chiami a.foo() direttamente, accederà falsealla console.
Ma, se fossi chiamata (0, a.foo)(). L'espressione (0, a.foo)valuterà ciascuno dei suoi operandi (da sinistra a destra) e restituirà il valore dell'ultimo operando. In altre parole, (0, a.foo)è equivalente a
function() {
console.log(this === window);
}
Poiché questa funzione non è più collegata a nulla, thisè l'oggetto globale window. Ecco perché accede truealla console durante la chiamata (0, a.foo)().
_b.a.call()per rendere chiara l'intenzione.