compose组合函数
把逻辑解耦在各个函数中,通过compose的方式组合函数,将外部数据依次通过各个函数的加工,生成结果。先执行后传入的函数。
redux源码中的中间件的处理使用的函数
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)));
}
compose组合函数使用示例
let a = x => x + "。";
let b = x => x + "!";
let c = x => x + "?";
let combineFun = compose(a, b, c)
combineFun('dyx') // dyx?!。
洋葱圈模型
通过以上的组合函数使传入的中间件函数变成(...arg) => mid1(mid2(mid3(...arg))),最后执行的中间件mid3最先执行完,最先执行的mid1最后执行完,是符合洋葱圈模型的。
柯里化函数
函数使用更加灵活,可以一次传入所有参数调用也可以只传入一部分参数调用,让它返回一个函数去处理剩余的参数。
function curry(fn) {
let judge = (...args) => {
// 一次传递了所有参数 则直接调用
if (args.length >= fn.length) {
return fn(...args);
}
return (...arg) => judge(...args, ...arg);
}
return judge;
}
function add(a, b, c) {
return a + b + c;
}
add(1, 2, 3) // 6
const addCurry = curry(add);
console.log(addCurry(1, 2, 3)); // 6
console.log(addCurry(1)(2)(3)); // 6
console.log(addCurry(1, 2)(3)); // 6
console.log(addCurry(1)(2, 3)); // 6
高阶函数
高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。Array.prototype.map,Array.prototype.filter 和 Array.prototype.reduce 是语言中内置的一些高阶函数。
纯函数
一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。