Biến `this` trong arrow function ES6

Chào các bạn, mình đang làm mấy ví dụ về mấy cái feature mới của ES6, trong cái ví dụ của mình thì biến this không xác định đc, giờ mình muốn lấy giá trị của cái value thì làm thế nào nhỉ @@

Ừm, thứ nhất là đoạn code đó của bạn nằm ở tầm vực ngoài cùng, nên this là window, (đính chính bên dưới) không cần gán that = this, và bạn nên học bản chất của this để không cần phải gán that = this nữa, cá nhân mình rất là gai mắt khi nhìn thấy that = this.

Thứ hai là bạn mắc phải sai lầm kinh điển của lập trình viên khi sử dụng closure, bạn tạo ra 1 đống execution context đều sử dụng CHUNG 1 biến i, sau khi chạy xong vòng lặp, biến i bằng 3, cho nên tất cả các callback đều sử dụng giá trị i là 3, bạn có thể tự console.log(i) ngay trong callback của listener để kiểm chứng.
Cách sửa là trong mỗi vòng lặp, copy giá trị biến i vào 1 biến cục bộ, rồi trong callback xài biến đó.

Thứ 3 là: cái value thì bạn phải lấy bằng cách button[i].value (ở đây mình coi như i có giá trị đúng), this hoặc that ở đây bằng window, làm gì có value nào?

1 Like

Cám ơn bạn, mình thấy 1 ví dụ về cái thứ 2 rồi để mình xem lại, còn cái thứ 3 button[i].value trong () => mình cũng chịu thật :smile:

Sorry bạn, mình nhầm tí, cái này bạn xài lambda expression nên this sẽ mang giá trị this của outer context, trong trường hợp này outer context là nằm ngoài function nên nó mang giá trị window nhé :disappointed_relieved:
Và bạn có thể dùng this.value bằng cách dùng callback thông thường, không dùng lambda expresion :disappointed_relieved:
Biến i thì trong trường hợp này bạn đổi sang biến khác, vd: let e = i, không dùng var được vì tầm vực của nó chỉ có là function scope thôi.

2 Likes

được rồi bạn ơi, ở trên dùng let mà ở dưới lại dùng var :smile: cám ơn bạn nhé :thumbsup:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?