Câu hỏi phỏng vấn Javascript
Câu hỏi

Currying trong Javascript là gì?

Câu trả lời

Currying trong JavaScript là một kỹ thuật chuyển đổi một hàm có nhiều đối số thành một chuỗi các hàm, mỗi hàm chỉ nhận một đối số. Kỹ thuật này được sử dụng để tạo ra một phiên bản mới của hàm ban đầu, cho phép một số đối số của hàm được cố định trước khi hàm được gọi.

Cách hoạt động

Currying hoạt động bằng cách tạo ra một chuỗi các hàm, mỗi hàm nhận một đối số và trả về một hàm mới cho đến khi tất cả các đối số đã được cung cấp. Cuối cùng, kết quả của hàm gốc sẽ được tính toán với tất cả các đối số đã được cung cấp.

Ví dụ

javascript Copy
function add(a) {
  return function(b) {
    return a + b;
  };
}

const add5 = add(5);
console.log(add5(3)); // 8

Trong ví dụ trên, hàm add được "curried" để tạo ra một hàm mới add5, hàm này đã cố định giá trị của đối số đầu tiên là 5. Khi gọi add5 với một đối số, nó sẽ thêm đối số đó vào 5.

Lợi ích

  • Tái sử dụng mã: Currying cho phép tái sử dụng một phần logic của hàm với một số đối số cố định, giúp giảm bớt lặp lại mã.
  • Hỗ trợ lập trình hàm: Currying là một kỹ thuật phổ biến trong lập trình hàm, giúp việc xử lý hàm trở nên linh hoạt hơn.
  • Tạo hàm với cấu hình trước: Cho phép tạo ra các phiên bản của một hàm với một hoặc nhiều đối số đã được "cài đặt" trước, giúp dễ dàng tạo ra các hàm mới từ hàm gốc.

Hạn chế

  • Độ phức tạp: Sử dụng currying có thể làm tăng độ phức tạp của mã, đặc biệt là với những người mới làm quen với kỹ thuật này.
  • Hiệu suất: Trong một số trường hợp, việc sử dụng currying có thể ảnh hưởng đến hiệu suất do tạo ra nhiều hàm trung gian.

Tóm lại, currying là một kỹ thuật mạnh mẽ trong JavaScript, giúp tạo ra các hàm linh hoạt và tái sử dụng mã. Tuy nhiên, cần cân nhắc khi sử dụng để tránh làm tăng độ phức tạp không cần thiết.

senior

senior

Gợi ý câu hỏi phỏng vấn

middle

Object trong Javascript là gì?

middle

Bạn có thể đưa ra một ví dụ về hàm curry và giải thích tại sao cú pháp này lại có ích?

middle

Kết quả đoạn code sau là gì? Hãy giải thích tại sao?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào