var greeting = (firstName, lastName) => 'hello, ' + firstName + ' ' + lastName
var toUpper = str => str.toUpperCase()
var fn = compose(toUpper, greeting)
console.log(fn('jack', 'smith'))
compose接受函數(shù)作為參數(shù)由驹,從右向左執(zhí)行挥吵,返回類型函數(shù)
fn()全部參數(shù)傳給最右邊的函數(shù)砂客,得到結(jié)果后傳給倒數(shù)第二個(gè),依次傳遞
compose的實(shí)現(xiàn)
var compose = function(...args) {
var len = args.length // args函數(shù)的個(gè)數(shù)
var count = len - 1
var result
return function func(...args1) { // func函數(shù)的args1參數(shù)枚舉
result = args[count].call(this, args1)
if(count > 0) {
count --
return func.call(null, result) // result 上一個(gè)函數(shù)的返回結(jié)果
} else {
//回復(fù)count初始狀態(tài)
count = len -1
return result
}
}
}