概述
- 本文将会阐述柯里化概念:原则、表象、使用
- 本文将会模拟实现一个柯里化函数
一、柯里化概念
- 原则:
◐ 一个函数处理的问题尽可能的单一
◐ 非最后一次的调用结果返回一个剩余参数的处理函数 - 表象:
◐ “调用复杂化”
◐ 下一次调用依附上一次调用的结果函数 - 使用/技巧:
◐ 复用相同参数的结果
二、封装实现柯里化函数_currying
function _currying(fn) {
function curry(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function (...args2) {
return curry.apply(this, [...args, ...args2]);
};
}
}
return curry;
}
三、例子
-
常规定义一个函数以实现x+y+z
const add = (x, y, z) => x + y + z;
-
柯里化实现
const add2 = x => y => z => x + y + z;
-
调用已封装函数_currying实现
const add3 = _currying(add);
-
调用验证
console.log(add(1, 2, 3)); // 6 console.log(add2(11)(22)(33)); // 66 console.log(add3(111)(222)(333)); // 666 // 复用首个参数进行调用 const add4 = add3(111); console.log(add4(222)(333)); // 666 console.log(add4(2222)(3333)); // 5666
参考文章: