柯理化学习笔记(四)

215 阅读1分钟

写一个例子,结合前面的三个特点。参数复用,提前返回,延迟执行。

function curry(fn) {
    let __args = [];
    return function cb() {
        if (arguments.length === 0 ) {
            return fn.apply(null, __args);
        }
// 这样写既支持传入一个参数,也支持传入多个参数。
        Array.prototype.push.apply(__args, [].slice.call(arguments));
        return cb;
    }
}
let add = function() {
// 把传入的参数转化成数组
    let arr = Array.from(arguments);
// 数组求和
    let res = arr.reduce((prev, current) => prev + current);
    console.log(res);
}
let curryAdd = curry(add);
curryAdd(1)(2)(2,3)();  // 结果输出8