什么是柯里化?
柯里化就是将函数内大量的逻辑分到一个个小函数中处理
柯里化的优势
- 确保了单一职责的原则,每个函数的职责清晰明了
- 对代码逻辑的复用,对确定的函数无需多次调用
什么是自动柯里化?
就是将一个普通函数,自动转换成柯里化函数
function myCurrying(fn) { // 判断当前已经接收的参数的个数,与参数本身需要接收的参数是否一致 // 1.当已经传入的参数 大于等于 需要的参数时,就执行函数 return function curried(...args) { if (args.length >= fn.length) { // 用apply的原因是防止在外界显示绑定了对象,与外界保持一致 return fn.apply(this, args) } else { // 没有达到个数时,需要返回一个新的函数,继续接收所需参数 return function (...args2) { // 接收到参数时 递归调用 继续判断参数是否满足 return curried.apply(this, [...args, ...args2]) } } }}function add(num1, num2) { num1 = num1 + 2 num2 = num2 * 2 return num1 + num2}const curryingAdd = myCurrying(add)console.log(curryingAdd(10, 20))console.log(curryingAdd(10)(20))