Skip to main content

Compose

升级 Docusaurus 至最新版本

const add = x => x + 10;
const mul = x => x * 10;

const compose = (...fns) => {
// return args => fns.reduceRight((val, fn) => {
// return fn(val)
// }, args);
return args => {
return fns.reduce((fn1, fn2) => {
// return fn2(fn1(args))
console.log(fn1)
return fn1(fn2(args))
})
}
}

console.log(compose(mul, add)(10));

const pipe = (val, ...fns) => {
return fns.reduce((val, fn) => {
return fn(val);
}, val)
}
// console.log(pipe(10, add, mul))
// =================================================================
function f1(arg) {
console.log("f1", arg);
return arg;
}

function f2(arg) {
console.log("f2", arg);
return arg;
}

function f3(arg) {
console.log("f3", arg);
return arg;
}

function compose1(...funcs) {
if (funcs.length === 0) {
return arg => arg;
}

if (funcs.length === 1) {
return funcs[0];
}

return funcs.reduce((a, b) => {
console.log(a,b, 33)
return (...args) => a(b(...args));
});
}

// console.log(compose1(), 9)
// let res = compose1(f1, f2, f3)("omg"); //f1(f2(f3("omg")));
// console.log("res", res);