Ngữ cảnh của hàm không được ràng buộc trong JavaScript
Hãy cùng xem điều gì sẽ xảy ra nếu chúng ta chỉ định
this trong một hàm
mà không ràng buộc nó với
bất kỳ phần tử nào, như thế này:
function func() {
console.log(this);
}
func();
Trong trường hợp này, kết quả phụ thuộc vào việc
chúng ta đang ở chế độ nghiêm ngặt
hay không. Nếu không ở chế độ nghiêm ngặt,
thì this sẽ chứa tham chiếu tới
window:
function func() {
console.log(this); // tham chiếu tới cửa sổ window
}
func();
Còn nếu ở chế độ nghiêm ngặt, thì this sẽ
chứa undefined:
"use strict";
function func() {
console.log(this); // undefined
}
func();
Từ những điều trên, có thể nghĩ rằng
trong chế độ nghiêm ngặt this sẽ luôn là
undefined. Không phải vậy! Nếu chỉ đơn giản
in this ra bên ngoài hàm, thì nó
sẽ là tham chiếu tới window bất kể
chế độ nào:
"use strict";
console.log(this); // trong this là tham chiếu tới window
Kết luận
Trong bất kỳ hàm nào, chúng ta cũng có thể viết this,
điều này sẽ không dẫn đến bất kỳ lỗi JavaScript nào.
Nhưng cái sẽ nằm trong this đó
không được xác định cho đến thời điểm hàm được gọi.
Hơn nữa, với các lần gọi hàm khác nhau, this
có thể nhận các giá trị khác nhau. Tất cả phụ thuộc
vào ngữ cảnh mà hàm được gọi.