科里化:
当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数当前永远不变)
而后返回一个新的函数接管残余的参数,返回后果。
编程最后学C语言,面相过程编程,起初接触C++,JAVA,OC的面相对象编程,对函数式编程还是一下子转不过去。这方面后续须要在工作中缓缓转变过去。
举个栗子:
解决硬编码的问题,纯函数的写法不够灵便。
// pure funcitonfunction checkAge(age){ let min = 18; return age >= min;}function checkAge (min,age){ return age >= min;}
科里化写法,函数粒度变小,更加扁平化。
function checkAge(min) { return function (age) { return age >= min; }}//es6写法let checkAge =min => (age => age >= min);// testlet checkAge18 = checkAge(18);checkAge18(24);
lodash中有curry
办法能够实现科里化
性能:创立一个函数,该函数接管一个或多个 func 的参数,如果 func 所须要的参数都被提
供则执行 func 并返回执行的后果。否则持续返回该函数并期待接管残余的参数。
参数:须要柯里化的函数
const _ = require('lodash')// 要柯里化的函数function getSum (a, b, c) {return a + b + c} // 柯里化后的函数let curried = _.curry(getSum)// 测试curried(1, 2, 3)curried(1)(2)(3)curried(1, 2)(3)
curry
函数模仿实现
function mycurry (func) { return function curriedFn(args){ if(args.length < func.length){ return function () { return curriedFn(...args.concat(Array.from(arguments))); } } // 参数个数一样,间接返回func return func(...args); }}
柯里化能够让咱们给一个函数传递较少的参数失去一个曾经记住了某些固定参数的新函数,这是一种对函数参数的'缓存'
让函数变的更灵便,让函数的粒度更小,能够把多元函数转换成一元函数,能够组合应用函数产生弱小的性能