js 函数柯里化

柯里化是一种将接受多个参数的函数转化为接受单一参数并返回新函数的技术,以增强函数的复用性和灵活性。文章通过一个生成URL的函数示例,展示了如何利用柯里化减少重复传参,同时保持代码的可扩展性。在不改变原有函数结构的情况下,柯里化解决了在特定场景下需要频繁传递固定参数的问题,特别是在需要根据不同条件组合调用同一函数时,提供了一种优雅的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

柯里化的目的是增加函数的复用性
当我们建立一个函数 第一个参数要处理一定的逻辑后 再对第二个参数处理逻辑 切不想要额外传递相同的参数 又不能改变函数内部结构 的使用就可以用到函数科里化

使用场景之一:减少重复传递不变的部分参数

lodash.curry

function simpleURL(protocol, domain, path) {
return protocol + "//" + domain + "/" + path;
}

上面这个函数是将三个参数生成一个完成的url.调用如下:

var myurl = simpleURL('http', 'mysite', 'home.html');
var myurl2 = simpleURL('http', 'mysite', 'aboutme.html');

然后你会发现,前两个参数保持不变,但每次调用都需要传递。所以可以对其优化,仅传递最后一个变化的参数。
通常我们第一个想法是将函数改成如下:

function simpleURL(path) {
return "http://mysite/" + path;
}

但是还是有点缺陷,如果这个库函数有被其它人使用呢,这种情况下基本上是不允许直接改库函数的。并且如果后期还需要处理https的请求呢。难道再把第一个参数加回去?这样别人若使用了该库函数也要修改调用代码。
针对这种情况,使用柯里化函数可以完美解决。
// 避免每次调用重复传参

function  _.curry(simpleURL){

   //箭头函数写法
   return (data)=>{
     return simpleURL+data
     } 
     // 常规写法
     return funaction(data){
           return  simpleURL+data
      }
}
let myURL1 = _.curry(simpleURL)('https', 'mysite');
let res1 = myURL1('home.html'); //

console.log(res1);//https://mysite/home.html

let myURL2 = _.curry(simpleURL)('http', 'mysite');
let res2 = myURL2('aboutme.html'); //
console.log(res2);//http://mysite/aboutme.html

文章引用:https://segmentfault.com/a/1190000015281061

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值