函数式编程

132 阅读2分钟

函数式编程用来描述函数之间的映射 指的是数学中的函数映射关系

函数是一等公民:

  • 函数可以储存在变量中
  • 函数可以作为参数
  • 函数可以作为返回值

高阶函数

  • 可以把函数作为参数传递给另一个函数
  • 可以把函数作为另一个函数的返回结果

高阶函数的意义

  • 高阶函数是用来抽象通用的问题
  • 抽象可以帮我们屏蔽细节只需要关注目的

纯函数

  • 概念:相同的输入永远会得到相同的输出,且没有可观察到的副作用

  • 好处:基于概念可知,我们可以对纯函数的结果进行缓存

副作用:如果函数依赖外部的状态 就不能保证相同的输入 有相同的输出

let mini = 18
function check(age){
  return age >= mini
} 
// 解决后 函数为纯函数 但存在硬编码,编程中应该尽量避免硬编码
function check(age){
  let mini = 18
  return age >=mini
}

以下方法可以解决硬编码,实现纯函数

function check(age, mini){
    return age>=mini
}
check(18,20)
check(18,15)
check(18,30)
check(20,20)

以上代码出现的age参数可能会的有大量的重复,可以用以下方案解决

function check(base){
  return function(num){
    return base < num
  }
}
let base10 =  check(10)
base10(20)
base10(5)

上面代码就实现了函数的柯里化

柯里化:当一个函数有多个参数时,可以先传递部分的参数(之后该部分参数不变), 然后返回一个新的函数来接受剩余的参数,并返回结果

lodash是一个纯函数的库,可以直接使用其中的细粒函数

npm i lodash

const _ = require('lodash')