高阶函数(HOC)
js中函数可以被赋值、当作参数进行传递、被其他函数返回,在js中函数就是一等公民。
高阶函数: 接收函数、返回函数
// 数组的筛选 const arr = [1,2,3,4,5] // 一般实现 let newArr = [] for (let i = 0; i < arr.length; i++){ if (arr[i] > 2) { newArr.push(arr[i]) } } // 使用filter arr.filter(item => item> 2)
函数的柯里化与偏应用
柯里化: 将多参数的函数转化为可以多次调用的函数
const curry = function (fn) { if (typeof fn !== 'function') { throw new Error('参数必须为function') } return function curryFn (...args) { if (args.length < fn.length) { return function () { return curryFn.apply(null, args.concat([].slice.call(arguments))) } } return fn.apply(null, args) } }
偏应用:预先给点参数,调用的时候再传其余的
const partial = function (fn, ...args) { return function (...innerArgs) { let index = 0 for (let i = 0; i < args.length && innerArgs.length; i++) { if (args[i] === undefined) { args[i] = innerArgs[index++] } } return fn.apply(null, args) } }
函数的组合
多个函数一起按照管道的顺序完成事情。
// compse函数 const compose = function (...args) { return function (val) { return args.reduce.call(args.reverse(), function(cur, fn) { return fn(cur) }, val) } }