compose函数

2018-08-30  本文已影响0人  _请输入昵称
var greeting = (firstName, lastName) => 'hello, ' + firstName + ' ' + lastName
var toUpper = str => str.toUpperCase()
var fn = compose(toUpper, greeting)
console.log(fn('jack', 'smith'))

compose接受函数作为参数,从右向左执行,返回类型函数
fn()全部参数传给最右边的函数,得到结果后传给倒数第二个,依次传递

compose的实现

var compose = function(...args) {
    var len = args.length // args函数的个数
    var count = len - 1
    var result
    return function func(...args1) { // func函数的args1参数枚举
        result = args[count].call(this, args1)
        if(count > 0) {
            count --
             return func.call(null, result) // result 上一个函数的返回结果
        } else {
              //回复count初始状态
              count = len -1
              return result
        }
    }
     
}
上一篇下一篇

猜你喜欢

热点阅读