01/10/2018, 15:57

Xin giải thích về Closure

Mình đang coi 1 ví dụ về closure trong JS, các bạn có thể xem video bên dưới, nó cũng rất ngắn thôi

Cái ví dụ họ đưa lúc đầu khi click vô button toàn alert() ra giá trị là 1. Cái này mình cũng hiểu nguyên nhân là do: mỗi lần khi click => sẽ gọi lại hàm incrementClickCount() => biến clickCount lại bị reset về giá trị lúc đầu là 0 rồi mới được + 1.

Như vậy mình nghĩ cách giải quyết đơn giản là lôi câu lệnh var clickCount = 0 ra bên ngoài hàm incrementClickCount() là đã giải quyết được vấn đề rồi.

Nhưng mà tại sao ở đây họ lại chọn cách giải quyết phức tạp hơn vậy. Hay là làm như họ thì sẽ có cái lợi gì chăng ???

Bạn nào rành phần này có thể giải thích giúp mình được không ạ .
Mình xin cám ơn nhiều !

Quân viết 17:58 ngày 01/10/2018

vì họ không muốn bất kì chỗ nào khác thay đổi biến clickCount ngoại trừ việc dùng incrementClickCount để tăng giá trị biến clickCount. Ở phút 1:36 họ có nói còn gì. Tất nhiên ở 1 dump example này thì bạn sẽ không thấy được lợi ích của việc gói bảo vệ dữ liệu như thế rồi. Nhưng hãy nghĩ rằng sẽ có những biến khi thay đổi giá trị thì sẽ phải update 1 số công việc khác liên quan nữa để đảm bảo đồng bộ dữ liệu. Nếu access vô tội vạ thì có thể làm chương trình chạy không đúng nữa.
PS: nếu bạn có kiến thức nền tảng về lập trình OOP từ 1 số NNLT OOP khác thì sẽ dễ hiểu hơn về ứng dụng của tính đóng gói dữ liệu như thế này

Thinh Minh Ha viết 18:07 ngày 01/10/2018

Tất nhiên ở 1 dump example này thì bạn sẽ không thấy được lợi ích của việc gói bảo vệ dữ liệu như thế rồi. Nhưng hãy nghĩ rằng sẽ có những biến khi thay đổi giá trị thì sẽ phải update 1 số công việc khác liên quan nữa để đảm bảo đồng bộ dữ liệu. Nếu access vô tội vạ thì có thể làm chương trình chạy không đúng nữa.

Cám ơn bạn đã giải thích cho mình.

Nếu có thể bạn cho mình xin 1 ví dụ cụ thể để chứng minh cho điều bên trên được không. Vì mình sợ, sau này có đi phỏng vấn họ hỏi câu này xong mình trả lời vậy họ lại bắt bẻ : "em có thể đưa ra 1 ví dụ cụ thể để chứng minh cho câu trả lời của e vừa nói không ? " - Đúng rồi , mình nghĩ rất có thể họ sẽ hỏi tiếp như vậy lắm chứ, vì lập trình mà … mọi thứ đều phải chứng minh được bằng ví dụ cụ thể rõ ràng.

mà mình thì mình chưa đi làm nên chưa va vấp nhiều, chưa gặp phải trường hợp nào cần phải để đảm bảo đồng bộ dữ liệu , nên lúc họ hỏi thế chắc mình đơ luôn quá.

Nếu có ngay 1 ví dụ cho họ thấy thì câu trả lời của mình chắc chắn có tính thuyết phục cao hơn, mình nghĩ vậy .

Zhang Jike viết 18:02 ngày 01/10/2018

Bạn đã đọc bao nhiêu bài viết về closure trong JavaScript rồi???

Thinh Minh Ha viết 18:08 ngày 01/10/2018

mình cũng có đọc qua mấy bài đại loại như ở đây:

kipalog.com

JavaScript Closures

Chào mừng sự trở lại sau kì nghỉ, đây cũng là bài viết cuối cùng trong năm 2015 của tôi. Trong bài viết này tôi sẽ giới thiệu với các bạn về Closur...


freetuts – 30 Oct 16

Bài 04: Closure là gì? Closure function trong Javascript

Tìm hiểu khái niệm Closure function là gì và các ví dụ về cách sử dụng hàm Closure trong Javascript, qua bài này bạn sẽ hiểu ý nghĩa Closure là gì và ứng dụng trong Javascript một cách thực tiễn.

Nhưng chưa hiểu được sâu lắm

AlexT viết 17:58 ngày 01/10/2018

mình thấy nó như 1 lớp vô danh như bên java ấy , framework viết sẵn method xử lý còn việc chi tiết xử lý thế nào mình sẽ truyền vào sau , bên java thì nếu muốn tái sử dụng thì viết ra interface rồi viết class implemet lại sau này dùng lại , mình học php cũng thấy có kiểu dữ liệu callable cho phép truyền vào 1 callback , cái hay của nó là bạn có thể viết sẳn cái khung còn việc thực hiện chi tiết sẽ được truyền vào tại thời điểm runtime…

Bài liên quan
0