function add(a, b, c, d) {
console.log(a, b, c, d)
console.log(a + b + c + d)
}
function createCurry(fn) {
const args = [].slice.apply(arguments).slice(1)
const argsLen = fn.length
return function() {
const _args = args.concat([].slice.apply(arguments))
if (_args.length < argsLen) {
return createCurry(fn, ..._args)
}
fn(..._args)
}
}
const add12 = createCurry(add, 1, 2)
add12(3, 4)
其实函数柯里化很简单,就是闭包+如何进行参数收集:
- 搞清楚要要柯里化的参数需要多少个参数。直接用函数的length属性获取
- 在闭包中,使用arguments收集参数
- 如果参数凑够了,就执行函数,如果没凑够,就接着收集