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
}
}
}