Thấu hiểu các JavaScript Closure: Phương pháp tiếp cận thực tiễn

401

Học một ngôn ngữ mới yêu cầu đến một loạt các bước, để thành thạo cần có sự kiên nhẫn, thực hành, sai lầm và rút ra kinh nghiệm.

Một số developer sẽ có đủ kiến thức để cung cấp các tính năng theo nhu cầu của khách hàng, nhưng phải mất nhiều thời gian hơn để trở thành developer tốt.

Một developer tốt là người cần có những kiến thức nền tảng về ngôn ngữ

Hôm nay chúng ta hãy nhìn sâu vào JavaScript closure và hy vọng rằng kiến thức bạn học sẽ có lợi trong các dự án.

JavaScript closure là gì?

JavaScript Closure là khi một inner function có quyền truy cập tới các thành viên của outer function (lexical scope) ngay cả khi thực thi bên ngoài phạm vi của outer function.

Vì vậy, chúng tôi không thể đủ khả năng để nói về closure trong khi bỏ ra các functions và scope.

Scope trong JavaScript

Scope đề cập đến mức độ hiển thị của một biến được xác định trong một chương trình. Các cách để tạo ra scope trong JavaScript là thông qua: try-catch blocksfunctionslet keyword  với } trong số những thứ khác. Chúng tôi chủ yếu có hai biến thể: global scope và local scope.

Mỗi function trong JavaScript tạo ra local scope riêng của nó khi được khai báo.

Điều này có nghĩa là bất cứ điều gì được khai báo bên trong local scope của function thì không thể truy cập từ bên ngoài. Xem xét minh hoạ dưới đây:

Lexical Scope

JavaScript Lexical Scope được xác định trong giai đoạn biên soạn. Nó xác định scope của một biến để nó chỉ có thể được gọi / tham khảo từ bên trong khối mã mà nó được định nghĩa.

Một function được khai báo bên trong một function block xung quanh có quyền truy cập vào các biến trong lexical scope của function xung quanh.

Gọi một inner function bên ngoài enclosing function của nó và vẫn duy trì quyền truy cập vào các biến trong enclosing function (lexical scope) tạo ra một JavaScript Closure.

Closure cho phép sử dụng một giao diện cộng đồng trong khi cùng một lúc ẩn và bảo vệ các xâm phạm từ phạm vi bên ngoài.

Một số mẫu thiết kế JavaScript sử dụng closure.

Module Pattern

Một trong những mô hình được triển khai tốt này là module pattern, mô hình này cho phép bạn mô phỏng: private, public và privileged member.

Từ module pattern mô tả ở trên, chỉ các phương pháp công khai và thuộc tính trong đối tượng trả về sẽ có sẵn bên ngoài ngữ cảnh thực thi của closure.

Tất cả các thành viên private sẽ vẫn tồn tại khi bối cảnh thực hiện của họ được bảo vệ nhưng bị che giấu khỏi outside scope.

Thêm ví dụ về Closures

Khi chúng ta vượt qua một function trong setTimeout hoặc bất kỳ kiểu gọi lại nào. Function vẫn còn nhớ lexical scope vì closure.

Closure và loop

Tôi tin rằng bây giờ chúng ta có một sự hiểu biết về closure và có thể làm như sau:

  • Minh hoạ các trường hợp sử dụng của nó hoặc xác định nó trong ngữ cảnh chúng ta không bao giờ biết
  • Giữ bối cảnh thực hiện như dự đoán
  • Triển khai code trong module pattern của JavaScript
  • Sử dụng closure trong code của chúng tôi, với sự hiểu biết rõ ràng

TopDev via Scotch

SHARE