Closure trong JavaScript
Bây giờ hãy cùng tìm hiểu khái niệm closure (closure). Thực ra bạn đã quen thuộc với khái niệm này, chỉ còn phải biết thuật ngữ chính xác.
Vậy, closure là một hàm cùng với tất cả các biến ngoài mà nó có thể truy cập. Hay nói cách khác, closure là một hàm cùng với môi trường từ vựng của nó.
Trong JavaScript, thông thường, khi nói "closure của hàm", người ta không chỉ chính hàm đó, mà là các biến ngoài của nó. Nếu một hàm nào đó nhận một biến từ môi trường từ vựng của nó, thì người ta nói "biến được lấy từ closure".
Hãy nhớ lại đoạn mã mà chúng ta đã thực hiện trong bài học trước:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // in ra 1
Trong trường hợp này, có thể nói rằng hàm
func nhận giá trị của biến
num từ closure. Cũng có thể nói,
hàm func lưu trữ giá trị của biến
num trong closure.