起因
最近在看掘金的面试经的时候,函数柯里化的出镜率相当高,大家对于这类面试题也有了相关的标准答案,今天我交一份不一样的答案给大家。
思考过程
首先函数的柯里化带来的结果是,使得原本要接收n个参数的函数可以分步接收参数,在参数个数满足条件后再执行,想到这个流程,我就想到了ES6里面的generator函数,因为这两者的流程很相似,generator函数不是立即执行,而是通过next按步执行,而且next可以传值,这样就肯定可以用generator函数改写相关函数为“柯里化函数”了。
答卷
function gKeli(fn) {
let len = fn.length
let args = []
let result
function *gg() {
for (let i = 0; i < len; i++) {
let t = yield
args.push(t)
}
result = fn.apply(null, args)
}
let tt = gg()
tt.next()
return function ah(t) {
tt.next(t)
if(result) {
return zz
}
return ah
}
}
function add(a, b, c) {
return a + b + c
}
console.log(gKeli(add)(1)(2)(3)) // 输出6
复制代码