Đóng cửa không hoạt động JavaScript

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 Javascript

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Đóng cửa không hoạt động JavaScript
dave xám

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

Đóng cửa hoạt động như thế nào trong JavaScript?

A Closure là sự kết hợp của một hàm kèm theo các tham chiếu đến trạng thái xung quanh của nó (môi trường từ vựng). Trong JavaScript, các bao đóng được tạo mỗi khi một hàm được tạo trong thời gian chạy . Nói cách khác, bao đóng chỉ là một cái tên ưa thích cho một chức năng ghi nhớ những thứ bên ngoài được sử dụng bên trong nó.

Nhược điểm của việc đóng trong JavaScript là gì?

Nhược điểm của việc đóng cửa . Các biến được khai báo bên trong một bao đóng không được thu gom rác . Quá nhiều lần đóng có thể làm chậm ứng dụng của bạn. Điều này thực sự là do trùng lặp mã trong bộ nhớ.

Mọi chức năng có phải là một bao đóng trong JavaScript không?

Nhưng như đã giải thích ở trên, trong JavaScript, tất cả các chức năng đều đóng tự nhiên (chỉ có một ngoại lệ, sẽ được đề cập trong phần "mới . Đó là. họ tự động ghi nhớ nơi chúng được tạo bằng cách sử dụng thuộc tính [[Môi trường]] ẩn và sau đó mã của họ có thể truy cập các biến bên ngoài.

ví dụ đóng cửa trong JavaScript là gì?

Điều này được gọi là đóng JavaScript. Nó giúp một hàm có thể có các biến "riêng tư". Bộ đếm được bảo vệ bởi phạm vi của chức năng ẩn danh và chỉ có thể thay đổi bằng chức năng thêm. 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