#1. Bản chất
- Lexical Scope: Hàm “nhớ” được phạm vi nơi nó được định nghĩa, chứ không phải nơi nó được gọi.
- Closure: Một function kết hợp với môi trường lexical của nó. Nó cho phép hàm truy cập biến bên ngoài ngay cả khi hàm cha đã thực thi xong.
#2. Ứng dụng thực tế: Data Privacy
function createCounter() {
let count = 0; // Private biến
return () => ++count;
}
const counter = createCounter(); // count không thể truy cập từ ngoài
#3. Phỏng vấn Senior
Q: “Tại sao closure hay gây ra memory leak trong React?”
A: Vì closure giữ tham chiếu đến biến của scope cha. Nếu closure đó được gán vào một sự kiện (event listener) lâu dài mà không clean up, các object lớn ở scope cha sẽ không bao giờ được Garbage Collector dọn dẹp.
Mẹo: Luôn null các biến hoặc removeEventListener khi component unmount.