QQ截圖20220615165345.png
柯里化函數(shù)的實(shí)現(xiàn)hyCurrying
function add1(x, y, z) {
return x + y + z
}
// 柯里化函數(shù)的實(shí)現(xiàn)hyCurrying
function hyCurrying(fn) {
function curried(...args) {
// 判斷當(dāng)前已經(jīng)接收的參數(shù)的個(gè)數(shù), 可以參數(shù)本身需要接受的參數(shù)是否已經(jīng)一致了
// 1.當(dāng)已經(jīng)傳入的參數(shù) 大于等于 需要的參數(shù)時(shí), 就執(zhí)行函數(shù)
if (args.length >= fn.length) {
// fn(...args)
// fn.call(this, ...args)
return fn.apply(this, args)
} else {
// 沒有達(dá)到個(gè)數(shù)時(shí), 需要返回一個(gè)新的函數(shù), 繼續(xù)來接收的參數(shù)
function curried2(...args2) {
// 接收到參數(shù)后, 需要遞歸調(diào)用curried來檢查函數(shù)的個(gè)數(shù)是否達(dá)到
return curried.apply(this, args.concat(args2))
}
return curried2
}
}
return curried
}
var curryAdd = hyCurrying(add1)
console.log(curryAdd(10, 20, 30))
console.log(curryAdd(10, 20)(30))
console.log(curryAdd(10)(20)(30))
image.png