函数柯里化
- 概念:
=>柯里化(Currying),又译为卡瑞化或加里化,是把接收多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。 - 作用:
=>可以固定相同参数,实现函数调用传参的简单化
=>可以让参数复用 - 关键点:
- 在于函数的返回值
- 其实就是函数层层返回一个函数,在返回的函数里面传递参数
- 每一个外界变量都会接收到一个函数本身,所以可以连续写多个括号
function curry(a){
return function(b){
return function(c){
return a + b + c
}
}
}
let res=curry(10)(20)(50)
/*
分析:
+ 第一个函数名加括号接收到的是
return function(b){
return function(c){
return a + b + c
}
}
+ 第二个函数名加括号接收到的是
return function(c){
return a + b + c
}
+ 第三个函数名加括号接收到的是
return a + b + c
*/
例如:
// 柯里化
function getUrlCurry(protocol){
return function(domain){
return function(port){
return protocol + domain + port
}
}
}
let http = getUrlCurry('https://')
let url1 = http('www.baidu.com')(':5050')
let url2 = http('www.mi.com')(':8080')
console.log(url1, url2)
//https://www.baidu.com:5050 https://www.mi.com:8080
例子2:
// 假设你是一个商家,要出售商品,为了卖出去更多的商品,今天决定打9折进行售卖,我们可以使用以下函数进行折扣后的售出价格计算
// function discount(price, disc){
// return price * (1 - disc)
// }
// let res = discount(5000, 0.1)
// console.log(res)
// 柯里化
function disCountCurry(disc){
return function(price){
return price * (1 - disc)
}
}
let price = disCountCurry(0.3)
let res1 = price(5000)
let res2 = price(8000)
console.log(res1, res2)
//3500 5600