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