函数柯里化及笔试题解

《JavaScript高级程序设计》
函数柯里化用于创建已经设置好一个或多个参数的函数。函数柯里化的基本方法与函数绑定是一样的:使用一个闭包返回一个函数。创建柯里化函数的通用方式:

function curry(fn) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function () {
        var innerArgs = Array.prototype.slice.call(arguments);
        var finalArgs = args.concat(innerArgs);
        return fn.apply(null, finalArgs);
    }
}

下面就看题吧!
七牛云笔试题:

function curry(fn) {
//your code here
}

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

const addEx = curry(add);
console.log(addEx(1, 2, 3)); //6
console.log(addEx(1)(2, 3)); //6
console.log(addEx(1)(2)(3)); //6

思路:当参数的总个数等于函数的形参个数时返回结果,参数总个数不够就返回一个函数,可继续调用。需要注意的是:因为argArr为所有函数共用,所以每次计算后都要将参数数组清空,否则它会影响下次的调用。
实现:

function curry(fn) {
    var argArr = Array.prototype.slice.call(arguments, 1);
    var len = fn.length;
    return function () {
        var innerArgs = Array.prototype.slice.call(arguments);
        argArr = argArr.concat(innerArgs);
        if(argArr.length === len) {
            var result = fn.apply(null, argArr);
            argArr = [];
            return result;
        } else {
            return arguments.callee;
        }
    }
}

你可能感兴趣的:(JavaScript)