假如有三个函数,每个函数的返回值作为其他函数的入参
function f1(arg){
return `f1${arg}`
}
function f2(arg){
return `f2${arg}`
}
function f3(arg){
return `f3${arg}`
}
console.log(f1(f2(f3("hello"))))
// => f3
// => f2
// => f1
// => f1f2f3hello
function compose(...funcs){
if(funcs.length === 0){
return arg =>arg
}
if(funcs.length === 1){
return funcs[0]
}
return funcs.reduce((a,b)=>(...args)=>a(b(...args)))
}
console.log(compose(f1,f2,f3)('hello'))
// => f3
// => f2
// => f1
// => f1f2f3hello
function compose(...funcs){
if(funcs.length === 0){
return arg =>arg
}
if(funcs.length === 1){
return funcs[0]
}
return funcs.reduce((a,b)=>{
console.log(a,b,'1')
return (...args)=>{
console.log(a,b,'2')
return a(b(...args))
}
})
}
console.log(compose(f1,f2,f3))
// => [Function: f1] [Function: f2] 1
// => [Function (anonymous)] [Function: f3] 1
// => [Function (anonymous)]
- 1.第一次执行 得到一个新函数 new1 = (args)=>f1(f2(args))
- 2.第二次执行 得到第二个新函数 new2 = (args) => new1(f3(args))
- 3.new2执行 new2('hello') => f3执行,并返回结果到 => new1执行,传入参数 => f2执行,返回结果 => f1执行,最终得到f1f2f3hello
网友评论