Nâng CaoJavaScript iconJavaScript

Closure có thể gây memory leak như thế nào?

Closure giữ tham chiếu đến scope ngoài, ngăn garbage collector giải phóng bộ nhớ. Vấn đề xảy ra khi closure không cần thiết giữ tham chiếu đến đối tượng lớn hoặc DOM node đã bị xóa.

Ví dụ điển hình: event listener không được xóa giữ reference đến component đã unmount:

javascript
function setup() {
  const largeData = new Array(1000000); // dữ liệu lớn
  window.addEventListener("resize", () => {
    console.log(largeData.length); // closure giữ largeData
  });
  // largeData không được GC vì event listener còn sống
}

Phòng tránh: gọi removeEventListener khi không cần, null hóa tham chiếu, dùng WeakRef/WeakMap cho cache.

Xem toàn bộ JavaScript cùng filter theo level & chủ đề con.

Mở danh sách JavaScript