如何实现一个简单的Currying闭包函数?

function add(a, b) {
  return a + b;
}

var curried = curry(add);
console.log(  curried(1)(2)  ); // 3
阅读 2.9k
2 个回答

给你一个简单的:

var curry = function(func) {
    var len = func.length;

    var getCurry = function(params) {
        return function() {
            var _this = this;
            var next = params.concat(Array.prototype.slice.call(arguments));
            if (len - next.length === 0) {
                return func.apply(_this, next);
            }
            return getCurry(next);
        };
    };

    return getCurry([]);
};

function add(a, b) {
    return a + b;
}

var curried = curry(add);
console.log(curried(1)(2)); // 3

有空可是玩玩: fe-interview

新手上路,请多包涵
var curryMaker = function (func) {
    var slice = Array.prototype.slice,
        storedArgs = slice.call(arguments, 1);

    return function(newArg) {
        storedArgs = storedArgs.concat(slice.apply(arguments));
        return func.apply(this, storedArgs);
    };
};

function add(a, b) {
    return a + b;
}


var c = curryMaker(add, 1)(2)

console.log(c);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题