【js手写系列】js函数柯里化

什么是柯里化:

// 正常函数
function add(a, b) {
    return a + b;
}
console.log(add(1, 2)); // 3


// 柯里化函数
function add(a) {
    return function(b) {
        return a + b;
    };
}
console.log(add(1)(2)); // 3

柯里化函数:输入一部分参数返回一个可以接收剩下的参数的函数

柯里化就是把正常函数变成柯里化函数

如何封装函数柯里化:

思路:

  • 首先目标是一个以一个函数作为参数,返回这个函数的柯里化函数的函数
  • 闭包把目前已经输入的参数存在一个数组里
  • 如果参数量不够,直接返回同一个函数(arguments.callee指函数本身)
  • 如果参数量够了,直接执行传入的函数

代码:

// 函数:
function curry(func) {
  const args = [];
  return function() {
    args.push(...arguments);
    if (args.length < func.length) {
    	return arguments.callee;
    } else {
    	return func(...args);
    }
  }
}

// 测试:
function test(a, b, c, d, e, f) {
	console.log(a, b, c, d, e, f);
}
const curried_test = curry(test);
curried_test(1)(2)(3)(4, 5)(6, 7); // 1 2 3 4 5 6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值