JavaScript Closures Là Gì? Hiểu Rõ Cách Hàm Ghi Nhớ Biến Và Ứng Dụng Thực Tế

JavaScript Closures Là Gì? Hiểu Rõ Cách Hàm Ghi Nhớ Biến Và Ứng Dụng Thực Tế
Cái này test nha brooo

Cái này test nha brooo

Ngày công bố: Chưa công bố

Tác giả

Ngày công bố: Chưa công bố

Hiểu Về JavaScript Closures — Bí Mật Đằng Sau Những Hàm Thông Minh

Nếu bạn từng gặp trường hợp một hàm “nhớ” được giá trị từ bên ngoài của nó dù hàm đó đã chạy xong, thì xin chúc mừng — bạn đã gặp Closure rồi đó! Đây là một trong những khái niệm quan trọng và mạnh mẽ nhất trong JavaScript, thường được sử dụng trong lập trình nâng cao, callback, và cả trong React Hooks.

1. Closure là gì?

Closure là khả năng của một hàm trong JavaScript có thể “nhớ” và truy cập đến các biến trong phạm vi (scope) mà nó được tạo ra, ngay cả khi phạm vi đó đã kết thúc. Nói cách khác, một closure giúp bạn giữ lại dữ liệu riêng tư cho một hàm mà không làm lộ ra bên ngoài.

2. Ví dụ cơ bản

Hãy xem ví dụ nhỏ dưới đây để hiểu cách hoạt động của closure:

<button id="counterBtn" onclick="increaseCounter()">Tăng giá trị</button>
<p>Giá trị hiện tại: <span id="counter">0</span></p>

<script>
  function createCounter() {
    let count = 0;
    return function() {
      count++;
      return count;
    }
  }

  const counter = createCounter();

  function increaseCounter() {
    document.getElementById('counter').textContent = counter();
  }
</script>

Demo trực tiếp

Giá trị hiện tại: 1

3. Giải thích ngắn gọn

Trong ví dụ trên, hàm createCounter() tạo ra một biến count và trả về một hàm con có thể tăng giá trị đó. Mặc dù createCounter() đã kết thúc, nhưng biến count vẫn được “nhớ” bên trong hàm con — đó chính là closure. Mỗi lần bạn bấm nút, hàm con truy cập lại biến count và tăng nó lên.

4. Ứng dụng của Closures

  • Giữ dữ liệu riêng tư mà không cần tạo biến toàn cục.
  • Tạo bộ đếm, cache, hoặc lưu trạng thái tạm thời.
  • Giúp viết code gọn gàng, tránh xung đột biến.
  • Là nền tảng của các khái niệm nâng cao như React Hooks hoặc module pattern.

5. Kết luận

Closures là một trong những “vũ khí bí mật” khiến JavaScript trở nên linh hoạt và mạnh mẽ. Khi bạn hiểu rõ closures, bạn sẽ viết được code gọn hơn, tránh lỗi phạm vi biến, và dễ dàng làm chủ các khái niệm như callback, debounce hay memoization. Hãy thử tự tạo một vài ví dụ tương tự và quan sát cách hàm của bạn “ghi nhớ” dữ liệu nhé!

Bình luận (2)

Nguyễn Văn A
Nguyễn Văn A
24/10/2024 10:00

Bài viết rất hay và chi tiết! Cảm ơn tác giả đã chia sẻ những kiến thức bổ ích.

Trả lời
Trần Thị B
Trần Thị B
25/10/2024 14:30

Mình cũng đồng ý với bạn. Bài viết này giúp mình hiểu rõ hơn về chủ đề.

Lê Văn C
Lê Văn C
26/10/2024 09:15

Mình có một câu hỏi về phần cuối bài viết. Có thể giải thích thêm về vấn đề này không?

Trả lời
Tương tác

Thích bài viết

0 người thích

Lưu bài viết

Đọc lại sau
0
Lượt xem
0
Lượt thích
0
Bình luận
Nội dung liên quan
Lộ trình học (5)