O operador vírgula avalia cada um de seus operandos (da esquerda para a direita) e retorna o valor do último operando.
console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console
Então, vamos ver um exemplo:
var a = {
foo: function() {
console.log(this === window);
}
};
a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console
Agora, no foo
método, this
é igual a a
(porque foo
está anexado aa
). Portanto, se você ligar a.foo(
) diretamente, ele registraráfalse
no console.
Mas, se você fosse chamado (0, a.foo)()
. A expressão (0, a.foo)
avaliará cada um de seus operandos (da esquerda para a direita) e retornará o valor do último operando. Em outras palavras, (0, a.foo)
é equivalente a
function() {
console.log(this === window);
}
Uma vez que esta função não está mais ligada a nada, é this
é o objeto global window
. É por isso que ele faz logon true
no console quando liga (0, a.foo)()
.
_b.a.call()
para deixar a intenção clara.