La expresión (0, myFunc)
es equivalente a poco myFunc
. El comma operator toma varias expresiones, las evalúa y devuelve la última expresión, por lo que (0, myFunc)
devuelve solo myFunc
.
Ahora, en su método de b
, this
es igual a a
porque b
se adjunta a a
. En otras palabras, b
puede llamarse al a.b()
. Sin embargo, es myFunc
no unido a a
(no se puede llamar por myFunc
a.myFunc()
), por lo que en myFunc
, this
no puede ser a
. De hecho, se llama a myFunc
sin establecer su this
por lo que su valor predeterminado es el objeto global window
(o permanece indefinido en modo estricto), y por lo tanto su this
es igual a window
.
Usted se estará preguntando cuál es el objetivo de la (0, listeners[i])()
cuando pudieron haber escrito listeners[i]()
. Considere el código que crea una matriz con dos elementos, dos funciones:
var listeners = [
function() { alert(this); },
function() { alert(this); }
];
Cuando se llama a listeners[0]()
, a continuación, en la función listeners[0]
, this
es igual a listeners
, porque 0
se adjunta a listeners
, al igual que cómo era b
adjunto al a
. Sin embargo, cuando llama a la función por (0, listeners[0])()
, listeners[0]
está "desacoplado" de la matriz listeners
.* Dado que la función desacoplada ya no está asociada a nada, su this
es el objeto global window
.
* Es como si escribió:
var temp = listeners[0];
temp();