柯里化(Currying)
- 作用:将接收多个参数的函数,转化为传递多次单一参数的函数。即:将
f(a,b,c) 转化为 f(a)(b)(c)
场景:
- 打折扣
account,计算多个商品的时候,如果每次都需要输入:'商品的价格' 与 '折扣',这样就会发现重复的输入了多次折扣,因此就可以优化
优化思路:
- 就是固定折扣
account不变,每次只需要输入不同的商品的价格即可
应用柯里化:
function getAccount(account) {
return function price(goodPrice) {
return account * goodPrice
}
}
const res = getAccount(0.1)
console.log(res(123))
console.log(res(523))
柯里化的js手写题
function currying(fn, ...args) {
const len = fn.length
let allArgs = [...args]
const res = (...params) => {
allArgs = [...args, ...params]
if (allArgs.length === len) {
return fn(...allArgs)
} else {
return res
}
}
return res
}
const add = (a, b, c) => {
return a + b + c
}
const restHandler = currying(add, 8)
restHandler(5,3)