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.