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 foo
phương thức, this
là 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 false
bả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ó this
là đối tượng toàn cục window
. Đó là lý do tại sao nó đăng nhập true
bảng điều khiển khi cuộc gọi (0, a.foo)()
.
_b.a.call()
cho ý định rõ ràng.