柯里化

100 阅读1分钟

概念

当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变),然后返回一个新的函数接收剩余的参数,返回结。

柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

// 普通的纯函数
function checkAge (min, age) {
    return age >= min
}
console.log(checkAge(18, 20))

// 函数的柯里化
function checkAge (min) {
    return function (age) {
        return age >= min
    }
}
// ES6写法
let checkAge = min => (age => age >= min)
console.log(checkAge(18)(24))

柯里化原理模拟

function curry (func) {
    return function curriedFn(...args) {
        // 判断实参和形参的个数
        if (args.length < func.length) {
            return function () {
                return curriedFn(...args.concat(Array.from(arguments)))
            }
        }
        return func(...args)
    }
}

优点

既能减少代码冗余,也能增加可读性

总结

  • 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数
  • 这是一种对函数参数的“缓存”
  • 让函数变的更灵活,让函数的粒度更小
  • 可以把多元函数转化成一元函数,可以组合使用函数,产生强大的功能