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]