Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
blockquote>console.log((1, 2)); // Returns 2 in console console.log((a = b = 3, c = 4)); // Returns 4 in console
Итак, посмотрим пример:
var a = { foo: function() { console.log(this === window); } }; a.foo(); // Returns 'false' in console (0, a.foo)(); // Returns 'true' in console
Теперь в
foo
методthis
равенa
(потому чтоfoo
присоединен кa
). Поэтому, если вы вызываетеa.foo(
), он будет записыватьfalse
в консоли.Но если вы звонили
(0, a.foo)()
. Выражение(0, a.foo)
будет оценивать каждый из его операндов (слева направо) и возвращает значение последнего операнда. Другими словами,(0, a.foo)
эквивалентенfunction() { console.log(this === window); }
. Поскольку эта функция больше не привязана ни к чему, ее
this
является глобальным объектомwindow
. Вот почему он записываетtrue
в консоли при вызове(0, a.foo)()
.