js函数柯里化,自定义实现及使用lodash实现函数柯里化

1、安装lodash

yarn add lodash

2、使用es5实现函数柯里化

function add(a, b) {
    return function (c, d) {
        // console.log(a + b + c + d)
        return a + b + c + d
    }
}
let num1 = add(1, 1)
console.log(num1(2, 2))
console.log(num1(2, 3)) //柯里化实现成功

3、使用es6简化实现函数柯里化

const es6Add = (a, b) => ((c, d) => (a + b + c + d))
let num2 = es6Add(2, 2)
console.log(num2(2, 2))
console.log(num2(2, 3))

4、使用lodash实现函数柯里化

function lodashAdd(a, b, c, d) {
    return a + b + c + d
}
let curried = _.curry(lodashAdd)    //_.curry的作用就是生成的函数里面传的参数个数全部传就会直接运算,没传完就会返回一个函数接受剩余参数并运算
let num3 = curried(3, 3)
console.log(num3(3, 3))

5、lodash.curry模拟实现

//函数柯里化模拟
function curry(fn) {
    return function curryFun(...args) {
        if (args.length < fn.length) {
            return function () {
                return curryFun(...args.concat(Array.from(arguments)))
            }
        }
        return fn(...args)
    }
}
function lodashAdd(a, b, c, d) {
    return a + b + c + d
}
let curried = curry(lodashAdd)
let num3 = curried(3, 3)
console.log(num3(3, 3))

6、函数柯里化总结:

  1、定义函数first接受部分参数。

  2、first返回一个新的函数second接受剩余的参数,并把运算结果返回。

  3、优点,提高编程的灵活性和执行效率