Bao đóng trong JavaScript
Trong JavaScript, hàm là một khối mã được thiết kế để thực hiện một tác vụ cụ thể. Nó chạy khi bạn gọi nó.
Ví dụ:
function myFunction(message){
console.log(message)
}
myFunction("Hello there!!")
myFunction("Welcome, boss")
Nhưng điều gì sẽ xảy ra nếu chúng ta muốn biết điều gì đã xảy ra trong lần thực hiện đầu tiên hoặc trước đó. Đó là nơi đóng cửa đến.
Đóng cửa là gì?
Nói một cách đơn giản, khi một hàm trả về một hàm khác, hàm này có quyền truy cập vào phạm vi hàm bên ngoài của nó được gọi là bao đóng trong JavaScript.
Ví dụ:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
function inner (){
counter++;
return counter;
}
Vì vậy, bằng cách nào đó, JavaScript đang ghi nhớ countergiá trị trước đó và nó đang thực hiện phép toán.
Bạn có thể hỏi Js đang làm điều đó như thế nào?
Khi một hàm trả về một hàm, nó không chỉ trả về hàm đó mà còn trả về phạm vi từ vựng của hàm đó. Tất cả các biến đó, dữ liệu có liên quan đến hàm được trả về đó dưới dạng thuộc tính ẩn cùng với hàm được trả về đó. Thuộc tính ẩn đó còn được gọi làBackpack
Ba lô này có nhiều tên:
- Đã đóng cửa vì 'Môi trường có thể thay đổi' (COVE)
- Dữ liệu tham chiếu phạm vi từ vựng liên tục (PLSRD)
- Balo
- Khép kín
Hãy xem xét một ví dụ khác:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
result() // 1
result() // 2
const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2
Tại sao đóng cửa:
- Nó giúp chúng tôi tạo chức năng trợ giúp kích hoạt các chức năng mạnh mẽ như một lần và ghi nhớ.
- Giúp chúng tôi tạo Iterators và Generators bằng cách sử dụng phạm vi từ vựng và bao đóng.
- Nhiều mẫu thiết kế JavaScript bao gồm cả mẫu mô-đun sử dụng bao đóng, bằng cách duy trì trạng thái cho một ứng dụng mà không làm ô nhiễm không gian tên chung.
- Các cuộc gọi lại và Lời hứa dựa vào các lần đóng để duy trì trạng thái trong thế giới JavaScript không đồng bộ.

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































