浮云一别后,流水十年间。——韦应物
函数柯里化
01_理解
function foo(a,b,c,d){
return a+b+c+d
}
foo(10,20,30,40)
//============上面变成下面的过程就是函数柯里化=============
function bar(a){
return function(b){
return function(c){
return function(d){
a+b+c+d
}
}
}
}
bar(10)(20)(30)(40)
// 简化柯里化过程(箭头函数)
var curryFn = x => y => z => console.log(x + y + z);
curryFn(10)(20)(30)
02_柯里化的优点
1)单一职责的原则
每个函数负责自己的业务代码,以免太对于复杂不好维护和代码冗余
function foo(a,b,c){
a = a+2
b = b*2
c = c*c
return a + b + c
}
console.log(foo(1,2,3));
//柯里化的优点:单一职责每个函数负责自己的业务代码,以免太对于复杂不好维护和代码冗余
function bar (a){
a = a + 2
return function(b){
b = b* 2
return function(c){
c = c * c
return a + b + c
}
}
}
console.log(bar(1)(2)(3));
2)参数定义复用-1
//实现固定的一个数字与其它数字进行相加
function makeAdder(count){
count = count * count
return function(num){
return count + num
}
}
let count = makeAdder(5)
console.log(count(10));
3)参数定义复用-2
function searchGoods(date,type,price){
console.log(`${date.getHours()}:${date.getMinutes()}---${type}---¥${price}`);
}
searchGoods(new Date(),"phone","3000")
//柯里化优化
let searchGoods = date => type => price => console.log(`${date.getHours()}:${date.getMinutes()}---${type}---¥${price}`);
searchGoods(new Date())("phone")("3000")
/*
参数复用
1.每次都需要传入new Date(),可以利用柯里化优化逻辑复用
2.每次固定查询一个类型
3.每次固定查询一个价位
*/
let dateSearcher = searchGoods(new Date())
dateSearcher("Phone")("2000")
let phoneSearcher = searchGoods(new Date())("phone")
phoneSearcher("1000")