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、优点,提高编程的灵活性和执行效率