Đừng bỏ lỡ concept Javascript quan trọng này - Closures
14 Feb 2024Hôm nay, chúng ta sẽ tìm hiểu bằng cách nào mà closures hoạt động trong Javascript bằng 1 ví dụ đơn giản.
Hiểu được closures là rất quan trọng để thành thạo được Javascript vì nó kích hoạt patterns hết sức mạnh mẽ như data privacy và function factories. Hơn thế nữa, đây là 1 chủ đề hết sức phổ biến trong phỏng vấn.
Rất nhiều dev Javascript gặp khó khăn với closures do tính trừu tượng của nó. Chúng ta sẽ giải thích 1 cách đơn giản và dễ hiểu có thể nắm bắt được khái niệm này 1 cách dễ dàng.
Hiểu được Closures để phát huy toàn bộ những kỹ năng về Javascript tiềm tàng của bạn
Closures là 1 khái niệm cơ bản trong Javascript, cho phép các function giữ quyền truy cập tới các variable từ scope của chúng ngay cả khi scope đó đã đóng.
Bây giờ chúng ta sẽ tạo 1 hàm có tên là parentFunction:

Bên trong hàm, ta thấy biến let có tên num với console.log Sau đó, ta tạo 1 hàm có tên là childFunction và trả về hàm đó. Hàm childFunction có giá trị log ra là num++. Hàm childFunction có quyền truy cập giá trị num vì nó có quyền truy cập vào scope hàm cha của nó trong đó có giá trị num.
Cuối cùng, chúng ta sẽ tạo 1 hàm có tên là finalFunction bằng cách thực thi parentFunction:

Nếu chúng ta chạy đoạn code này, thì đây chính xác là những gì hàm finalFunction sẽ được log ra:

Điều quan trọng là bên ngoài hàm parentFunction, chúng ta không thể truy cập giá trị num. Chúng ta sẽ nhận về error nếu log như cách làm dưới đây:

Tuy nhiên, nếu chúng ta thực thi hàm finalFunction:

Chúng ta sẽ thấy giá trị num tăng lên 1.

Chúng ta thấy giá trị được log ra bằng 1 vì console.log(num) đầu tiên được thực thi khi hàm finalFunction được tạo thông qua parentFunction. Và sau đó, giá trị 2 được hiện thị bởi vì chúng ta chạy hàm finalFunction.
Hàm finalFunction có quyền truy cập vào giá trị num mặc dù hàm parentFunction đã được gọi và closed lại.
Một closure được tạo ra khi chúng ta định nghĩa 1 hàm chứ không phải khi 1 hàm đó thực thi.
Có thể hiểu ngắn ngọn, xúc tích như khái niệm trên w3schools: Closures là 1 hàm có quyền truy cập vào scope của cha nó, thậm chí là sau khi hàm cha đã bị closed
Tổng kết lại
Hiểu rõ closures là 1 điều hết sức quan trọng để đi sâu vào các khái niệm nâng cao hơn trong front-end development. Ngoài ra, đây là 1 chủ để phổ biến trong phỏng vấn. Vì vậy bằng cách nắm bắt khái niệm này, bạn sẽ nâng cao kỹ năng đối với 1 front-end developer.

