函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
函数柯里化的主要作用:
- 参数复用
- 提前返回 – 返回接受余下的参数且返回结果的新函数
- 延迟执行 – 返回新函数,等待执行
const curry = (fn, ...args) => {
// 2.后面进入时判断传参数量是否符合要执行的函数需要的参数,不符合时继续返回curry方法,把要执行的函数和参数传进去
if (args.length < fn.length) {
// 1.js上下文初始化执行var sum = curry(sumFn);时,返回curry方法,把要执行的函数和参数传进去
return (...arguments) => curry(fn, ...args, ...arguments);
} else {
// 3.要执行的函数可执行时立即执行返回结果
return fn(...args);
}
};
function sumFn(a, b, c) {
return a + b + c;
}
var sum = curry(sumFn);
console.log(sum(2, 3)(5)); //10
const curry = function (fn) {
const args = [].slice.call(arguments,1)
return function m () {
const totalArgs = args.concat(...arguments)
if(totalArgs.length === fn.length){
return fn.apply(this,totalArgs)
}else {
return function () {
return m(...totalArgs,...arguments)
}
}
}
}
const addSum = (a,b,c)=>console.log(a,b,c);
const curredAddSum = curry(addSum)
curredAddSum(2,3)(4)