js实现函数柯理化

140 阅读1分钟
什么是柯理化?

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

function add() {
  // 1. 函数add执行时这条只会执行一次,只收集add函数传进来的第一个参数(第一个括号的参数)
    var _args = Array.prototype.slice.call(arguments);

  // 2. 当有多个参数时,_add依次被调用并收集所有的参数,利用闭包的特性保存_args
    var _add = function () {
        _args.push(...arguments);
        return _add
    }
  
// 3. 当最后计算结果res的时候会调用这个函数,使用reduce依次将参数求和并返回最终的结果
    _add.toString = function () {
        _args.reduce(function (a, b) {
            return a + b
        }, 0)
    }
    return _add
}

var res = add(1, 2)(3);
console.log(res); //6