这段代码实现了一个柯里化 (currying) 函数。柯里化是一种将接受多个参数的函数变换成接受一个单一参数 (最初函数的第一个参数) 并返回接受余下参数且返回结果的新函数的技术。

首先定义了一个求和函数 sum,该函数接受四个参数 a、b、c、d,并返回它们的和。

function sum(a, b, c, d) {
  return a + b + c + d;
}

然后定义了一个 curry 函数,该函数接受一个函数 cb 作为参数,返回一个新的函数 fn。fn 函数接受任意数量的参数,并将这些参数存储在数组 arrs 中。如果 arrs 数组长度小于 cb 函数的形参个数,则返回 fn 函数本身,否则调用 cb 函数,将 arrs 数组作为参数传入。

function curry(cb) {
  let arrs = [];

  function fn(...args) {
    arrs = [...arrs, ...args];
    if (arrs.length < cb.length) {
      return fn;
    } else {
      return cb(...arrs);
    }
  }
  return fn;
}

最后,通过将 sum 函数传入 curry 函数,返回了一个新的函数 sfn,它可以接受任意数量的参数,并在接受足够数量的参数后返回它们的和。这个过程中,sfn 函数通过 curry 函数将 sum 函数转化为了一个柯里化函数。

let sfn = curry(sum);

示例:

console.log(sfn(1)(2)(3)(4)); // 输出 10
console.log(sfn(1, 2, 3, 4)); // 输出 10
console.log(sfn(1, 2)(3, 4)); // 输出 10

总结:

柯里化是一种强大的函数式编程技术,它可以使函数更加灵活,并简化代码逻辑。通过将函数分解成一系列接受单个参数的函数,我们可以更容易地组合和复用函数。

标签: 常规


原文地址: https://gggwd.com/t/topic/l4mY 著作权归作者所有。请勿转载和采集!