函数柯里化的实现
实现思路
创建一个柯里化函数,它接受一个函数作为参数,并返回一个新函数。
在新函数内部,使用闭包保存传入的函数和已经传入的参数。
在新函数的主体中,判断已经传入的参数数量是否满足原函数的参数数量。
如果已经传入的参数数量足够,就调用原函数并传入这些参数,返回结果。
如果已经传入的参数数量不足,就返回一个新的柯里化函数,并将已经传入的参数和新传入的参数合并。
重复步骤3到步骤5,直到所有参数都被处理完毕。
js
// 函数柯里化通常由闭包和递归实现
function curry(fn) {
// 返回柯里化后的函数
return function curried(...args) {
// 持续接受参数,若参数数量大于等于原函数,则直接传入原函数并调用
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
// 否则返回一个新的函数,直到函数的所有参数都被收集完毕
return function (...newArgs) {
// 收集参数
return curried.apply(this, args.concat(newArgs));
};
}
};
}
Blog of Desain