欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > JS | 函数柯里化

JS | 函数柯里化

2025/4/18 20:30:43 来源:https://blog.csdn.net/weixin_42479421/article/details/147100978  浏览:    关键词:JS | 函数柯里化

函数柯里化(Currying:将一个接收多个参数函数,转换为一系列只接受一个参数的函数的过程。即 逐个接收参数


例子:

普通函数:

function add(a, b, c) {return a + b + c;
}
add(1, 2, 3); // 输出 6

柯里化版本:

function curriedAdd(a) {return function (b) {return function (c) {return a + b + c;};};
}
curriedAdd(1)(2)(3); // 输出 6


📌 二、柯里化函数源码详解

function curry(fn, argLength){return function curried(...args) {if(args.length >= argLength) {    // 当传入的参数大于期望的参数时,即 参数个数够了return fn.apply(this, args)} else {return function(...args2){    // 当传入的参数不够时,递归调用函数,并进行拼接return curried.apply(this, args.concat(args2));}}}
}

✅ 三、逐行解释 curry 函数


🔹 function curry(fn, argLength)

  • fn:柯里化的目标函数,如 add(a, b, c)

  • argLength期望的参数个数


🔹 return function curried(...args) {

  • 返回一个新函数 curried,用于收集传入的参数

  • args 当前接收到的参数集合(可能不全)


🔹 if (args.length >= argLength)

  • 如果参数够了,说明我们已经收集完了所需的参数

✅ 执行目标函数:

return fn.apply(this, args)

  • 调用原函数 fn,传入完整参数 args

  • 使用 .apply() 是为了把数组参数展开执行

.apply( this的值要传递给函数的参数 ) —— Function.prototype.apply

fn.apply(thisArg, [argsArray])

等价于

fn(...argsArray)

是 js 中函数的内置方法,用来"调用"一个函数,并显示指定(两个参数):

  • “this”指向
  • “参数数组传入方式”——> 可以是数组或者类数组对象,表示要传递给函数的参数

例子:

function sayHi(name, age){console.log(`${name} is ${age} years old.`);
}sayHi.apply(null, ['Alice', 25]);    // 输出 Alice is 25 years old.

🔹 else { return function(...args2) { ... }}

  • 如果参数还不够,返回一个新的函数,继续收集参数

⚡ 重点:

return curried.apply(this, args.concat(args2))

  • 把之前的参数 args 和现在的参数 args2 合并

  • 再次调用 curried 自身,形成递归


✅ 五、总结对比表

行为对象目的触发条件
fn.apply(this, args)原始函数执行目标函数参数数量足够
curried.apply(this, args.concat(args2))柯里化函数自身递归收集参数参数不够

例题:牛客 JS56 返回函数

    版权声明:

    本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

    我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

    热搜词