Câu hỏi rất hay! Câu trả lời là:
❌ Higher-Order Function (HOF) không phải "hàm trong hàm",
✅ mà là hàm nhận một hàm làm đối số hoặc trả về một hàm khác.
Higher-Order Function là hàm thỏa mãn ít nhất một trong hai điều kiện sau:
// HOF: nhận hàm làm đối số
function doTwice(action) {
action();
action();
}
// HOF: trả về một hàm khác
function multiplier(factor) {
return function(x) {
return x * factor;
};
}
const double = multiplier(2);
console.log(double(5)); // 10
Khái niệm | Có phải là "hàm trong hàm"? | Đặc điểm chính |
---|---|---|
Nested function | ✅ Có | Hàm khai báo trong hàm khác |
Closure | ✅ Có | Nested function + giữ biến từ cha |
Higher-Order Function | ❌ Không nhất thiết | Nhận/trả về hàm |
HOF là về “hàm xử lý hàm”, chứ không phải về nơi bạn viết hàm.