Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Việc dùng hàm ẩn danh (anonymous functions) có ảnh hưởng hiệu năng không?

Hàm ẩn danh (anonymous functions) có thể ảnh hưởng hiệu năng trong một số tình huống, nhưng thường không đáng kể trong ứng dụng thực tế. Hiểu trade-off giúp viết code tốt hơn.

Điểm cần lưu ý

  • Tạo object hàm mới mỗi lần chạy: Nếu định nghĩa hàm ẩn danh trong vòng lặp hoặc hàm cha được gọi nhiều lần, mỗi lần tạo một function object mới → tăng GC pressure.
  • Không thể tái sử dụng: Không tham chiếu được để gỡ event listener (removeEventListener cần cùng tham chiếu).
  • Debug khó khăn: Stack trace hiển thị "(anonymous)" thay vì tên hàm có ý nghĩa.
  • Closure vô tình: Có thể giữ tham chiếu đến biến ngoài không cần thiết, gây memory leak.

Ví dụ hàm ẩn danh

// Gán vào biến
var func = function() {
  alert('Đây là hàm ẩn danh');
};
func(); // Gọi qua biến

// Dùng làm callback
setTimeout(function() {
  console.log('Chạy sau 1 giây');
}, 1000);

Khuyến nghị

  • Dùng hàm có tên (named function) cho event handler, callback phức tạp, hoặc cần tái sử dụng.
  • Arrow function (() => {}) cũng là anonymous – cùng vấn đề.
  • Tối ưu hóa: định nghĩa hàm ngoài vòng lặp, dùng bind hoặc closure cẩn thận.
  • Hiện đại: Engine JS (V8, SpiderMonkey) tối ưu rất tốt, hiệu năng chỉ thành vấn đề ở hot path cực đoan.