JavaScript函数式编程柯里化的个人笔记

一、引出

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

二、实现

function add(a,b,c,d){
    return a + b + c + d;
};
function FixedParmasCurry(fn){
    var _arg = [].slice.call(arguments,1);//0:fn,剪切后面的
    return function(){//返回新函数
    	var newArg = _arg.concat([].slice.call(arguments,0));//将返回后的函数执行时参数拼接
    	return fn.apply(this,newArg);//最后执行的还是传进来的函数
    };
};
var newadd = FixedParmasCurry(add,6);
console.log(newadd(7,8,9));
function Curry(fn,length){
    var length = length || fn.length;
    return function(){
        if(arguments.length < length){
        	//[fn,a,..]
        	var conbined = [fn].concat([].slice.call(arguments,0));
      		//依次拼接参数
        	return Curry(FixedParmasCurry.apply(this,conbined),length - arguments.length);
        }else{
            return fn.apply(this,arguments);
        }
   }
};
var newadd = Curry(add);
console.log(newadd(3)(4)(5)(6));

三、习题练习

1.某面试题:
实现一个add方法,使计算结果能够满足如下预期:
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;
答案下期揭晓

博主开始运营自己的公众号啦,感兴趣的可以关注“飞羽逐星”微信公众号哦,拿起手机就能阅读感兴趣的博客啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值