Hàm hạng nhất

Một ngôn ngữ lập trình được gọi là có hàm hạng nhất (first-class functions) khi các hàm trong ngôn ngữ đó được đối xử như bất kỳ biến nào khác. Ví dụ, trong ngôn ngữ như vậy, một hàm có thể được truyền như đối số cho các hàm khác, có thể được trả về bởi một hàm khác và có thể được gán làm giá trị cho một biến.

Ví dụ

Gán hàm cho một biến

js
const foo = () => {
  console.log("foobar");
};
foo(); // Gọi nó bằng cách sử dụng biến
// foobar

Chúng ta đã gán một Hàm ẩn danh cho một Variable, sau đó chúng ta sử dụng biến đó để gọi hàm bằng cách thêm dấu ngoặc đơn () ở cuối.

Note: Ngay cả khi hàm của bạn có tên, bạn có thể sử dụng tên biến để gọi nó. Đặt tên sẽ hữu ích khi gỡ lỗi code. Nhưng nó sẽ không ảnh hưởng đến cách chúng ta gọi nó.

Truyền hàm như một đối số

js
function sayHello() {
  return "Hello, ";
}
function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}
// Truyền `sayHello` như một đối số cho hàm `greeting`
greeting(sayHello, "JavaScript!");
// Hello, JavaScript!

Chúng ta đang truyền hàm sayHello() như một đối số cho hàm greeting(), điều này giải thích cách chúng ta đối xử với hàm như một giá trị.

Note: Hàm mà chúng ta truyền như đối số cho một hàm khác được gọi là callback function. sayHello() là một callback function.

Trả về một hàm

js
function sayHello() {
  return () => {
    console.log("Hello!");
  };
}

Trong ví dụ này, chúng ta đang trả về một hàm từ một hàm khác - Chúng ta có thể trả về một hàm vì các hàm trong JavaScript được đối xử như các giá trị.

Note: Một hàm trả về một hàm hoặc nhận các hàm khác làm đối số được gọi là hàm bậc cao (higher-order function).

Xem thêm