JavaScript Closures: Hướng dẫn toàn diện
tsudev· 01/09/2026
Khái niệm về JavaScript Closures
JavaScript Closures là một khái niệm quan trọng trong lập trình web, cho phép bạn tạo ra các hàm có thể nhớ và sử dụng các biến từ phạm vi của hàm khác. Điều này giúp bạn viết mã nguồn linh hoạt và hiệu quả hơn.Phạm vi của hàm trong JavaScript
Phạm vi của hàm là nơi mà các biến được định nghĩa và có thể được truy cập. Khi một hàm được định nghĩa trong một phạm vi khác, nó có thể truy cập vào các biến trong phạm vi đó. Ví dụ, bạn có thể định nghĩa một hàm như sau:javascript
function tạoHàmNội() {
let biếnNội = 10;
function hàmNội() {
console.log(biếnNội);
}
return hàmNội;
}
Trong ví dụ trên, hàm hàmNội có thể truy cập vào biến biếnNội trong phạm vi của hàm tạoHàmNội, ngay cả khi hàm tạoHàmNội đã kết thúc thực thi.
Tạo và sử dụng closures
Closures có thể được tạo và sử dụng trong nhiều trường hợp khác nhau. Ví dụ, bạn có thể sử dụng closures để tạo ra các hàm có thể nhớ và sử dụng các biến từ phạm vi của hàm khác. Bạn cũng có thể sử dụng closures để tạo ra các hàm có thể được sử dụng như các đối tượng.Một ví dụ khác về sử dụng closures là tạo ra một hàm có thể đếm số lần nó được gọi:
javascript
function tạoĐếm() {
let đếm = 0;
return function() {
đếm++;
console.log(dếm);
}
}
const đếmSố = tạoĐếm();
đếmSố(); // 1
đếmSố(); // 2
đếmSố(); // 3Trong ví dụ trên, hàm
tạoĐếm trả về một hàm có thể đếm số lần nó được gọi. Hàm này sử dụng một biến đếm để lưu trữ số lần nó được gọi.
Ưu điểm và nhược điểm của closures
Closures có nhiều ưu điểm trong lập trình web, bao gồm giúp bạn tạo ra các hàm có thể nhớ và sử dụng các biến từ phạm vi của hàm khác. Tuy nhiên, closures cũng có một số nhược điểm, bao gồm có thể gây ra rò rỉ bộ nhớ nếu không được sử dụng đúng cách.Để sử dụng closures một cách hiệu quả và an toàn, bạn cần phải hiểu rõ về cách thức hoạt động của chúng và sử dụng chúng đúng cách. Bạn cũng cần phải tránh sử dụng closures quá nhiều, vì nó có thể gây ra rò rỉ bộ nhớ và làm cho mã nguồn trở nên khó đọc.