Phạm vi từ vựng mô tả cách các hàm lồng nhau (còn được gọi là "con") có quyền truy cập vào các biến được xác định trong phạm vi cha
const myFunction = () => { let myValue = 2; console.log(myValue); const childFunction = () => { console.log(myValue += 1); } childFunction(); } myFunction();Trong ví dụ này, childFunction có quyền truy cập vào biến myValue được xác định trong phạm vi cha của myFunction
Phạm vi từ vựng của childFunction cho phép truy cập vào phạm vi gốc
Đóng cửa trong JavaScript là gì?
w3Schools. com cung cấp một định nghĩa tuyệt vời về việc đóng cửa là gì
Bao đóng là một hàm có quyền truy cập vào phạm vi cha, ngay cả sau khi hàm cha đã đóng
Hãy lưu ý phần đầu tiên của câu trước dấu phẩy
một hàm có quyền truy cập vào phạm vi cha
Đó là mô tả phạm vi từ vựng
Nhưng chúng ta cần phần thứ hai của định nghĩa để đưa ra ví dụ về bao đóng
ngay cả sau khi chức năng cha đã đóng
Hãy xem một ví dụ về đóng cửa
const myFunction = () => { let myValue = 2; console.log(myValue); const childFunction = () => { console.log(myValue += 1); } return childFunction; } const result = myFunction(); console.log(result); result(); result(); result();Sao chép mã ví dụ ở trên và dùng thử
Hãy phá vỡ những gì đang xảy ra
Trong bản sửa đổi này, myFunction trả về childFunction thay vì gọi nó
Do đó, khi result được đặt bằng với myFunction(), câu lệnh bảng điều khiển bên trong myFunction được ghi lại, nhưng không phải câu lệnh bên trong childFunction
childFunction không được gọi vào hành động
Thay vào đó, nó được trả lại và giữ trong result
Ngoài ra, chúng ta cần nhận ra rằng myFunction đã đóng sau khi nó được gọi
Dòng có const myFunction = () => { let myValue = 2; console.log(myValue); const childFunction = () => { console.log(myValue += 1); } return childFunction; } const result = myFunction(); console.log(result); result(); result(); result();5 sẽ hiển thị trong bảng điều khiển rằng result hiện giữ giá trị hàm ẩn danh là childFunction
Bây giờ, khi chúng tôi gọi const myFunction = () => { let myValue = 2; console.log(myValue); const childFunction = () => { console.log(myValue += 1); } return childFunction; } const result = myFunction(); console.log(result); result(); result(); result();8, chúng tôi đang gọi hàm ẩn danh đã được gán cho childFunction
Là con của myFunction, hàm ẩn danh này có quyền truy cập vào biến myValue bên trong myFunction ngay cả sau khi nó đã đóng
Bao đóng mà chúng ta đã tạo bây giờ cho phép chúng ta tiếp tục tăng giá trị của biến myValue mỗi khi chúng ta gọi const myFunction = () => { let myValue = 2; console.log(myValue); const childFunction = () => { console.log(myValue += 1); } return childFunction; } const result = myFunction(); console.log(result); result(); result(); result();8
Dành thời gian của bạn với việc đóng cửa
Đóng cửa được coi là một khái niệm nâng cao vì lý do chính đáng
Ngay cả với sự phân tích từng bước về việc đóng cửa là gì, khái niệm này có thể mất thời gian để hiểu
Đừng vội hiểu và đừng khắt khe với bản thân nếu ban đầu nó không có ý nghĩa
Khi bạn hiểu đầy đủ về đóng cửa, bạn có thể cảm thấy như Neo khi anh ấy nhìn thấy Ma trận. Bạn sẽ thấy các khả năng viết mã mới và nhận ra rằng chúng luôn ở đó
Tôi sẽ để lại cho bạn một hướng dẫn về cách đóng cửa từ kênh YouTube của tôi. Tôi tìm hiểu sâu hơn một chút và cung cấp thêm một vài ví dụ về bao đóng để xây dựng dựa trên cuộc thảo luận trong bài viết này
Hướng dẫn đóng JavascriptQUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Xin chào, tôi hiện đang làm bằng tiến sĩ về Hệ thống thông tin. Đồng thời là Kiến trúc sư & Nhà phát triển giải pháp toàn thời gian. "Phấn đấu cho sự tiến bộ, không phải sự hoàn hảo. " Theo dõi tôi trên Twitter. @yesdavidgray
Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu