Toán tử dấu phẩy đánh giá từng toán hạng của nó (từ trái sang phải) và trả về giá trị của toán hạng cuối cùng.
console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console
Vì vậy, hãy xem một ví dụ:
var a = {
foo: function() {
console.log(this === window);
}
};
a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console
Bây giờ, trong foophương thức, thislà bằng a(bởi vì foođược gắn vào a). Vì vậy, nếu bạn gọia.foo( ) trực tiếp, nó sẽ đăng nhập falsebảng điều khiển.
Nhưng, nếu bạn được gọi (0, a.foo)(). Biểu thức (0, a.foo)sẽ đánh giá từng toán hạng của nó (từ trái sang phải) và trả về giá trị của toán hạng cuối cùng. Nói cách khác, (0, a.foo)tương đương với
function() {
console.log(this === window);
}
Vì hàm này không còn được gắn với bất cứ thứ gì, nên nó thislà đối tượng toàn cục window. Đó là lý do tại sao nó đăng nhập truebảng điều khiển khi cuộc gọi (0, a.foo)().
_b.a.call()cho ý định rõ ràng.