Function expression trong JavaScript là một cách định nghĩa hàm bằng cách gán nó cho một biến. Khác với function declaration, nơi bạn có thể định nghĩa hàm bằng cách sử dụng từ khóa function mà không cần gán cho một biến, function expression yêu cầu bạn phải gán hàm đó cho một biến hoặc sử dụng nó trực tiếp như một tham số của hàm khác.

Dưới đây là một số điểm quan trọng về function expression:

Cách định nghĩa

Một function expression có thể được định nghĩa như sau:

const add = function(a, b) {
    return a + b;
};

Trong ví dụ trên, hàm add được định nghĩa như một function expression và được gán cho biến add. Bạn có thể gọi hàm này như sau:

console.log(add(2, 3)); // Kết quả: 5

Anonymous Function Expressions

Function expressions có thể là “anonymous” (không có tên), như trong ví dụ trên. Bạn cũng có thể sử dụng anonymous function expressions khi truyền vào các hàm khác:

setTimeout(function() {
    console.log("Hello after 2 seconds");
}, 2000);

Named Function Expressions

Bạn cũng có thể định nghĩa function expression với tên, nhưng tên này chỉ có tác dụng bên trong hàm đó:

const factorial = function fact(n) {
    if (n === 0) return 1;
    return n * fact(n - 1);
};

console.log(factorial(5)); // Kết quả: 120

Sử dụng trong Callback

Function expressions thường được sử dụng trong callback hoặc khi truyền hàm như một tham số:

const numbers = [1, 2, 3, 4, 5];

const doubled = numbers.map(function(num) {
    return num * 2;
});

console.log(doubled); // Kết quả: [2, 4, 6, 8, 10]

Ưu điểm của Function Expressions

  1. Khiến mã trở nên linh hoạt: Bạn có thể truyền hàm như một tham số cho các hàm khác.
  2. Ẩn thông tin: Với anonymous function, bạn có thể giấu đi những chi tiết thực hiện bên trong hàm mà không làm lộn xộn không gian tên toàn cục.
  3. Hỗ trợ Closures: Function expressions có thể tạo ra closures, cho phép bạn duy trì trạng thái của biến bên ngoài hàm.

Kết luận

Function expressions là một phần quan trọng trong JavaScript, giúp bạn tổ chức mã hiệu quả hơn và tạo ra các hàm có thể sử dụng lại một cách dễ dàng. Hãy sử dụng chúng trong các tình huống cần thiết, đặc biệt là khi bạn cần một hàm linh hoạt hoặc muốn truyền hàm như một tham số.