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.
Tuyển dụng Javascript lương cao mới nhất
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 blocks
, functions
, let 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.
When we pass a function into a setTimeout or any kind of callback. The function still remembers the lexical scope because of the closure.function foo () { var bar = 'bar' setTimeout(function () { console.log(bar) }, 1000) } foo() // bar
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
Tham khảo thêm các vị trí tuyển ngành CNTT tại đây