- 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 里变量的作用域及递归函数轻松解决。