Prompt Detail:
Trong JavaScript, từ khóa "this" được sử dụng để tham chiếu đến đối tượng hiện tại, tức là đối tượng mà phương thức hoặc hàm đang được thực thi.
Tuy nhiên, trong một số trường hợp, giá trị của "this" có thể thay đổi trong quá trình thực thi của chương trình, đặc biệt là khi nó được sử dụng bên trong một hàm hoặc phương thức lồng nhau.
Trong các tình huống như vậy, nếu bạn muốn lưu trữ giá trị của "this" để sử dụng sau đó, bạn có thể sử dụng biến "self" để tham chiếu đến "this". Biến "self" được gán giá trị của "this" vào ban đầu và giữ nguyên giá trị này trong phạm vi của hàm hoặc phương thức. Như vậy, khi "this" thay đổi giá trị trong quá trình thực thi, "self" vẫn giữ nguyên giá trị ban đầu của "this".
Ví dụ:
javascriptvar obj = {
name: "John",
sayName: function() {
console.log(this.name); // giá trị ban đầu của "this"
var self = this;
setTimeout(function() {
console.log(self.name); // giá trị của "this" đã thay đổi, nhưng "self" giữ nguyên giá trị ban đầu của "this"
}, 1000);
}
};
obj.sayName(); // kết quả: "John" và "John"
Trong ví dụ trên, khi hàm "setTimeout" được gọi, giá trị của "this" đã thay đổi sang đối tượng "Window" của trình du