理解简单的柯里化


//使用闭包 和递归 必须要满足curry传递的函数条件 才可以进行执行 比如 他传递了 a,b,c 比如要三个参数满足了才会执行这个函数
// 写柯里化的时候不能给函数传递默认值 
function curry(fn, length) {   //  2  1 
    length = length || fn.length; 
    var slice = Array.prototype.slice;
    return function() { 
        if (arguments.length < length) {  //就是如果是一个函数他的参数肯定是 === arguments 如果在有一个函数传递进去 肯定进这个if 里面
            var combined = [fn].concat(slice.call(arguments));
            return curry(sub_curry.apply(this, combined), length - arguments.length);
        } else {
            return fn.apply(this, arguments);
        }
    };
}
var fn = curry(function(a , b, c) {
    return [a, b, c];
});

// 写柯里化的时候 不能给 函数 有默认值
var fn = curry(function(a  = 1, b, c) { // fn.length ==== 0
    return [a, b, c];
});


console.log(fn("a")('b')('c')); // ['a','b','c']

你可能感兴趣的:(理解简单的柯里化)