丁鹿学堂:js函数式编程(二)compose函数的使用

106 阅读1分钟
函数式编程的compose

函数式编程就像搭积木,通过不同的函数组合实现复杂的功能。

但是在实现过程中传值和连续调用不方便也不优雅,所以可以借助compose函数。

composet函数可以方便的连续执行方法,它把传值和调用的过程进行了封装,我们只需要传递给compose函数我们要执行的方法,它会自动帮我们执行。

简单的说,他就是辅助我们去连续执行函数的一个功能函数。

自己封装一个compose

compose的参数应该是函数,先执行的函数参数放到后面,也就是compose函数从右向左执行传入的参数(参数是一个一个的函数)。

因为传入的参数是不确定的,所以函数内部使用argumens去获取所有的不定参。

每次执行以后,第一次调用的结果,就是下一次函数的参数。

compose的返回值是一个函数,这个函数说白了就是参数函数调用的组合结果。

代码:

function compose(){
  const args = [].slice.apply(arguments) // 把类数组arguments变成数组
  return function(data){
    let _result = data
    for(let i = args.length -1 ;i>=0;i--){
      _result = args[i](_result)
    }
    return _result
  }
}

需求: 让一个整数,先加一,再乘2。

这是一个很简单的需求,我们主要看怎么通过函数式编程的形式去实现这个需求。

简单的例子更容易看清楚本质的内核。

function addNum(num){
  return ++num 
}
function multiply(num){
  return num *2
}

let result = compose(multiply,addNum)(2)
console.log(result)

可以看到,通过封装的compose函数,我们只需要传入要执行的步骤函数,调用的时候传入参数,就可以很优雅的实现需求