函数式编程---小记

高阶函数(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)
    }
  }

 

 

posted @ 2021-04-16 16:39  ken丶123  阅读(35)  评论(0编辑  收藏  举报