Bạn có thể cho một ví dụ về một hàm curry và tại sao cú pháp này mang lại lợi thế?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
483 lượt xem
Javascript master

Currying là một pattern trong đó một hàm có nhiều hơn một tham số được chia thành nhiều hàm, khi được gọi nối tiếp, sẽ tích lũy tất cả các tham số được yêu cầu cùng một lúc.

Kỹ thuật này có thể hữu ích để làm cho mã được viết theo kiểu functional dễ đọc và soạn thảo hơn. Điều quan trọng cần lưu ý là để một hàm được xử lý, nó cần bắt đầu như một hàm, sau đó được chia nhỏ thành một chuỗi các hàm mà mỗi hàm chấp nhận một tham số.

function curry(fn) {
   if (fn.length === 0) {
      return fn;
   } 
   function _curried(depth, args) {
      return function(newArgument) {
         if (depth - 1 === 0) {
            return fn(...args, newArgument);
         }
         return _curried(depth - 1, [...args, newArgument]);
       };
   }
   return _curried(fn.length, []);
}

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

var curriedAdd = curry(add);
var addFive = curriedAdd(5);

var result = [0, 1, 2, 3, 4, 5].map(addFive); // [5, 6, 7, 8, 9, 10]
Câu hỏi tiếp theo: Khác nhau giữa null và undefined?
{{login.error}}