
获得徽章 19
/*--------------------------------------- pipe/compose ------------------------------------------*/
//pipe函数作用
//pipe函数接受任意数量的函数作为参数,然后返回一个新函数,这个新函数会依次执行每一个参数函数,并将前一个函数的返回值传递给下一个函数。
//compose函数作用
//compose函数接受任意数量的函数作为参数,然后返回一个新函数,这个新函数会依次执行每一个参数函数,但是是从右往左执行。
//pipe函数
const pipe =
(...fns) =>
(x) =>
fns.reduce((v, f) => f(v), x);
//compose函数
const compose =
(...fns) =>
(x) =>
fns.reduceRight((v, f) => f(v), x);
const add = (x) => x + 1;
const multiply = (x) => x * 2;
const subtract = (x) => x - 3;
const divide = (x) => x / 4;
const addThenMultiply = pipe(add, multiply);
const subtractThenDivide = compose(subtract, divide);
console.log(addThenMultiply(1)); // 4
console.log(subtractThenDivide(1)); // -2.75
//pipe函数作用
//pipe函数接受任意数量的函数作为参数,然后返回一个新函数,这个新函数会依次执行每一个参数函数,并将前一个函数的返回值传递给下一个函数。
//compose函数作用
//compose函数接受任意数量的函数作为参数,然后返回一个新函数,这个新函数会依次执行每一个参数函数,但是是从右往左执行。
//pipe函数
const pipe =
(...fns) =>
(x) =>
fns.reduce((v, f) => f(v), x);
//compose函数
const compose =
(...fns) =>
(x) =>
fns.reduceRight((v, f) => f(v), x);
const add = (x) => x + 1;
const multiply = (x) => x * 2;
const subtract = (x) => x - 3;
const divide = (x) => x / 4;
const addThenMultiply = pipe(add, multiply);
const subtractThenDivide = compose(subtract, divide);
console.log(addThenMultiply(1)); // 4
console.log(subtractThenDivide(1)); // -2.75
展开
评论
点赞
/*--------------------------------------- 部分应用函数/柯里化 ------------------------------------------*/
//科里化是将一个多参数函数转换为一系列单参数函数的过程
//部分应用是指固定一个函数的一个或
//多个参数,然后生成另一个函数的过程
//柯里化是部分应用的一个特例
//柯里化的目标是使函数参数降维
//curyfunc
const curyFunc = (func, args = []) => {
return (input) => {
const newArgs = args.concat(input);
if (newArgs.length >= func.length) {
return func(...newArgs);
} else {
return curyFunc(func, newArgs);
}
};
};
const add = (a, b, c, d) => a + b + c + d;
const curyAdd = curyFunc(add);
console.log(curyAdd(1)(2)(3)(4)); // 10
//科里化是将一个多参数函数转换为一系列单参数函数的过程
//部分应用是指固定一个函数的一个或
//多个参数,然后生成另一个函数的过程
//柯里化是部分应用的一个特例
//柯里化的目标是使函数参数降维
//curyfunc
const curyFunc = (func, args = []) => {
return (input) => {
const newArgs = args.concat(input);
if (newArgs.length >= func.length) {
return func(...newArgs);
} else {
return curyFunc(func, newArgs);
}
};
};
const add = (a, b, c, d) => a + b + c + d;
const curyAdd = curyFunc(add);
console.log(curyAdd(1)(2)(3)(4)); // 10
展开
评论
点赞
赞了这篇文章