01/10/2018, 09:32

This trong hàm closure javascript

Các bác cho em hỏi tại sao this trong hàm closure luôn đại diện cho đối tượng window, Ví dụ như trong đoạn code này:

    myMethod: function() {
        return (function(){
            console.log(this) // đối tượng toàn cục
        })();
    }
};
obj.myMethod();

this được gọi đến qua ngữ cảnh là đối tượng obj, vậy tại sao kết quả lại ra window vậy các bác?
`

Zhang Jike viết 11:41 ngày 01/10/2018

Global scope bây giờ là window object. Window cũng là object mà. Khi bạn self invoke hàm như kia thì nó thực thi ở global context r. Nên nó sẽ chỉ đến window.
Còn nếu bạn muốn nó trỏ đến object thì như này là được

    myMethod: function() {
        console.log(this);
    }

HuJunPiO viết 11:48 ngày 01/10/2018

sao lại thực thi ở global context hả bác, em chưa hiểu lắm

nguyen huy hoang viết 11:45 ngày 01/10/2018

giải thích cho bạn hiểu hai điều. thứ nhất là không có khái niệm " hàm closure", closure chỉ là một khá niệm trong javascript dùng để giải thích cơ chế làm việc của js, đoán chắc bạn chưa thực sự hiểu closure là cái gì.
ở ví dụ bạn đưa ra thì mình giải thích thế này. “this” trong js tương đối phức tạp và mình không nói hết được các quy tắc ở đây nhưng ở thường hợp của bạn. “this” đại diện cho object gọi hàm đó CHỈ KHI “this” nằm trực tiếp trong “method” hay phương thức của hàm. ở trường hợp của bạn this đang nằm trong một hàm được khai báo độc lập, không được gọi qua đối tượng nào thì this sẽ là global object ( nếu bạn dùng “use strict” ở đầu function thì this sẽ là undefined )

Bài liên quan
0