搞不懂的柯里化

前端开发 2016-12-13

封装一个count方法,能实现如此调用:count(a)(b)(c)(d)(e)… 并且返回的值为参数连乘的结果,即abcde*…。如count(1)(3)(7) 得到21

function count(a){
    return function(b){
        return a*b;
    }
}
// count(1)(2)
function count(a){
    return function(b){
        return function(c){
            return a*b*c;
        };
    }
}
// count(1)(2)(4)
// 根据规律改进  ,只能做到count(1)(3)(7)()这一步了,能力达不到~~
function count(a){
    var cc = function(x){
        if(!arguments.length) return a;
        return count(a*x)
    }
    return cc;
}

count(1)(3) -- function 3 差一点

function count(x){
  var fn = function(y){
    return count(x*y);
  }
  fn.toString = function(){
    return x;
  };
    return fn;
}
console.log( count(1)(2)(4) )   // function 8
console.log( (count(1)(2)(4)).toString() );     // 8

不懂

柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

  • 参数复用 参考链接地址http://www.zhangxinxu.com/wordpress/2013/02/js-currying/ ```javascript function currying(fn) { var slice = Array.prototype.slice, __args = slice.call(arguments, 1); return function() { var __inargs = slice.call(arguments); return fn.apply(null, __args.concat(__inargs)); }; }

var getWife = currying(function() { var allWife = [].slice.call(arguments); console.log(allWife.join(";")); }, "0");

getWife(1, 2, 3, 4, 5) // 0;1;2;3;4;5 ```

相关推荐