什么是柯里化函数:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术
方法一
// 柯里化函数 每次的入参都是一个参数
// 例子,计算求和
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>