柯里化的目的是增加函数的复用性
当我们建立一个函数 第一个参数要处理一定的逻辑后 再对第二个参数处理逻辑 切不想要额外传递相同的参数 又不能改变函数内部结构 的使用就可以用到函数科里化
使用场景之一:减少重复传递不变的部分参数
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