- C20250069's blog
JS 部分函数
- 2023-3-15 22:16:16 @
成品
let factory = (callback, paramlen, bind, thisarg) => (...param) => {
if (param.length >= paramlen) {
return bind ? callback.apply(thisarg, param) : callback(...param);
}
function cc(su, paaram){
if (typeof su != 'object') su = [];
let ppp = su.concat(paaram);
if (ppp.length >= paramlen) {
return bind ? callback.apply(thisarg, ppp) : callback(...ppp);
}
else return (...paaraam) => cc(Array.from(ppp), paaraam);
}
return (...paraam) => cc(Array.from(param), paraam);
}
对于任意一个函数 cb(p1, p2, ..., pk)
,调用 factory(cb, k)
得到函数 cbf
,则 cb(p1, p2, ..., pk), cbf(p1)()(p2, ...,)(pk), cbf(p1, p2, ...)()(pk)
均是等价的。
实现原理
利用了 js 里变量的作用域及递归函数轻松解决。