// ---- 柯里化-------
function curry (fn, ...rest) {
if (rest.length < fn.length)
return function curried (...argus) {
if (rest.concat(argus).length < fn.length)
return function () {
return curried(...rest.concat(argus, Array.from(arguments)))
}
return fn(...rest, ...argus)
}
return fn(...rest)
}
// function add (a, b, c) {
// return a + b + c
// }
// const curryAdd = curry(add, 1, 2)
// console.log(curryAdd(1))
// -------- 组合函数 ------
function compose (...fns) {
return function (value) {
return fns.reduce((value, fn) => {
return fn(value)
}, value)
}
}
// function add (v) {
// return v + 3
// }
// function reduce (v) {
// return v - 1
// }
// const fn = compose(add, reduce)
// console.log(fn(4))