JavaScript 柯里化函数实现详解
这段代码实现了一个柯里化 (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 著作权归作者所有。请勿转载和采集!