什么是柯里化?
柯里化就是将函数内大量的逻辑分到一个个小函数中处理
柯里化的优势
- 确保了单一职责的原则,每个函数的职责清晰明了
- 对代码逻辑的复用,对确定的函数无需多次调用
什么是自动柯里化?
就是将一个普通函数,自动转换成柯里化函数
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))