El operador de coma evalúa cada uno de sus operandos (de izquierda a derecha) y devuelve el valor del último operando.
console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console
Entonces, veamos un ejemplo:
var a = {
foo: function() {
console.log(this === window);
}
};
a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console
Ahora, en foo
método, this
es igual a a
(porque foo
se adjunta a a
). Entonces, si llama a.foo(
) directamente, iniciará sesión false
en la consola.
Pero, si te llamaras (0, a.foo)()
. La expresión (0, a.foo)
evaluará cada uno de sus operandos (de izquierda a derecha) y devolverá el valor del último operando. En otras palabras, (0, a.foo)
es equivalente a
function() {
console.log(this === window);
}
Dado que esta función ya no está asociada a nada, this
es el objeto global window
. Es por eso que inicia sesión true
en la consola cuando llama (0, a.foo)()
.
_b.a.call()
para dejar clara la intención.