Оператор комами оцінює кожен його операнд (зліва направо) і повертає значення останнього операнда.
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)().
_b.a.call()для того, щоб зрозуміти наміри.