柯里化函数的应用场景

什么是柯里化函数:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

方法一

// 柯里化函数 每次的入参都是一个参数
// 例子,计算求和
function sum(a, b, c, d, e) {
     return a + b + c + d + e
}
function curring(fn, arr = []) {
     console.log(fn);

     let len = fn.length;  // 函数的长度就是形参的个数
     return function (...args) {
          let newArgs = [...arr, ...args];  // 把两个数组合并
          if (newArgs.length == len) {
               return fn(...newArgs);
          } else {
               return curring(fn, newArgs)
          }
     }
}

let newSum = curring(sum)

console.log(newSum(1)(2)(3)(4)(5));
console.log(newSum(1)(2)(3, 4, 5));

方法二

<script>
  function sum(a, b, c) {
    return a + b + c;
  }

  let curring = (fn) => {
    // 需要根据fn的长度和我们当前掉用是传递的参数做比较,比较两个数的大小,如果参数个数大于用户传递的参数 需要返回一个新的函数,否则让这个函数执行
    function inner(args = []) {
     // args 每次用户调用时的参数个数
      return fn.length > args.length
        ? (...arr) => inner([...args, ...arr])
        : fn(...args);
    }
    return inner();
  };


  let fn1 = curring(sum);
  let fn2 = fn1(1,2)
  let r = fn2(3)
  console.log(r);
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值