Đóng cửa trong JavaScript được thực hiện đơn giản

Bạn có biết JavaScript giữ cho phạm vi chức năng của bạn tồn tại sau khi thực thi không?

Ảnh của Juanjo Jaramillo trên Unsplash

Đóng trong JavaScript có nghĩa là một hàm bên trong có quyền truy cập vào các biến của hàm bên ngoài. Điều này cũng áp dụng khi quá trình thực thi chức năng bên ngoài kết thúc.

Cách các hàm thông thường hoạt động trong JavaScript

Hãy xem ngắn gọn cách một hàm thông thường hoạt động trong JavaScript.

Một hàm JavaScript tạo một phạm vi mới. Các biến được xác định bên trong phạm vi đó không thể truy cập từ bên ngoài.

Đây là một chức năng ví dụ:

function hello() {
  const word = "Hello";
  console.log(word);
}
hello();

Hello

Cố gắng truy cập hellobên ngoài chức năng không hoạt động:

function hello() {
  const word = "Hello";
}
console.log(word);

Uncaught ReferenceError: word is not defined

Một bao đóng trong JavaScript giúp nó có thể truy cập các biến của một hàm bên ngoài nó. Mỗi khi bạn chạy một hàm, một bao đóng sẽ được tạo dưới mui xe.

Đóng cho phép bạn truy cập vào phạm vi của một chức năng bên ngoài từ một chức năng bên trong.

Ví dụ: hãy kiểm tra hành vi của tập lệnh này trong đó một chức năng bên ngoài có một chức năng bên trong:

  • Hàm outer()trả về inner()hàm. Điều này có nghĩa là bạn có thể lưu trữ inner()hàm vào một biến:
  • const greet = outer()
    

    greet()
    

    Hello world
    

    function inner() {
         const b = "World"; 
         console.log(a+b);
    }
    

Hãy cùng xem outer()lại hàm một lần nữa:

  • Hàm inner()tự động biết nó nằm bên trong một hàm được gọi outer(). Do đó, nó "lưu" các biến thuộc về outer()hàm để sử dụng sau này. Đây là lý do tại sao greet()vẫn có thể truy cập giá trị a.

Ví dụ thực tế về đóng cửa

Hãy thiết lập một bộ đếm đơn giản để theo dõi số lần nhấp chuột, ví dụ:

var counter = 0;
function increment() {
  counter++;
}

Để xây dựng một bộ đếm đáng tin cậy, bạn cần phải định cấu hình increment()chức năng theo cách mà các phần khác của mã không thể làm xáo countertrộn biến.

Đây là nơi mà việc đóng cửa có ích. Hãy triển khai lại bộ đếm bằng cách tạo một hàm bên trong một hàm:

Mã này hoạt động giống như cách tổ outer() inner()hợp hàm mà bạn đã thấy trước đó. Nó sử dụng bản chất đóng của JavaScript:

  • createCounter()là chức năng bên ngoài. Nó đặt một counterbiến thành 0và trả về một hàm bên trong increment().
  • increment()hàm chịu trách nhiệm thêm các giá trị vào counter.
  • Hàm increment()có quyền truy cập vào các biến của createCounter()ngay cả sau khi gọi createCounter(). Điều này là do tính chất đóng của JavaScript.
  • Đầu tiên, hãy gọi createCounter()để thiết lập quầy:
  • let add = createCounter();
    

    add();
    add();
    add();
    

    1
    2
    3
    

Bộ đếm biến có thể được truy cập trong gia số hàm bên trong.

Cảm ơn vì đã đọc. Tôi hy vọng bạn tìm thấy nó hữu ích

Đọc thêm

20 đoạn mã JavaScript để viết mã giống như một chuyên gia

Người giới thiệu

Nội dung khác tại plainenglish.io

Suggested posts

Tìm kiếm thông tin về tên miền

Đoạn trích từ Small, Sharp Software Tools của Brian P. Hogan

Tìm kiếm thông tin về tên miền

Khi bạn gửi yêu cầu tới facebook.com, máy tính của bạn sẽ tra cứu tên miền để dịch tên miền đó thành địa chỉ IP để máy tính của bạn có thể thực hiện kết nối đó.

Mẹo để chuyển đổi sang lĩnh vực an ninh mạng mà không cần nền tảng kỹ thuật.

Mẹo để chuyển đổi sang lĩnh vực an ninh mạng mà không cần nền tảng kỹ thuật.

Vào năm 2022, tôi chuyển từ vai trò phi kỹ thuật sang vai trò an ninh mạng. Tôi đã có bằng tiếng Đức đầu tiên, tôi biết bạn đang bị sốc và tò mò về cách tôi có thể chuyển đổi thành công, Chà, nó chỉ xảy ra thôi.

Related posts

Học tập trong tuần làm việc quan trọng hơn bạn nghĩ

Học tập trong tuần làm việc quan trọng hơn bạn nghĩ

Chúng ta thường thấy mình phải vật lộn để thực hiện những gì chúng ta biết là tốt cho chúng ta. Từ việc nói với một người quan trọng khác rằng chúng ta yêu họ đến việc nhớ nói chuyện như một tên cướp biển, sẽ luôn có những người cho rằng không cần thiết phải tổ chức các sự kiện trong ngày, tuần hoặc tháng vì họ đã làm những việc đó rồi.

đại từ là siêu đáng sợ

Nó đập vào mắt tôi Đột ngột như nó thường xảy ra Nó lại ở giữa chừng <Không, không phải cái ở Thái Bình Dương đâu bạn màu hạt dẻ, cái ở lễ hội hóa trang> Mọi tiêu đề đều ầm ĩ…..

Mạng truyền hình Twitter

Mạng truyền hình Twitter

Cái cũ giờ lại mới và cái từng lấp lánh sáng bóng giờ trở nên buồn tẻ. Tôi không nói về việc quần jean JNCO đang trở lại trong giới trẻ sành điệu ở trung tâm thành phố cùng với các mốt cuối thập niên 1990 khác.

Tạp chí Ouvert

Tạp chí Ouvert

Mở Nhật ký: Một bức tranh mỗi ngày. Tôi luôn bị mê hoặc bởi những câu chuyện.