nodejs-shizhan
nodejs-shizhan copied to clipboard
79页函数柯里化实现有问题
我的修改如下
function curry(fn, args = []) {
const length = fn.length
return function() {
const _args = args.slice(0)
Array.prototype.push.apply(_args, Array.prototype.slice.call(arguments))
if (_args.length === length) {
return fn.apply(this, _args)
}
return curry.call(this, fn, _args)
}
}
恩,忘记当初是怎么测试的了。最主要还是 arg 引用被复用了 没有重置,而且返回值也不是函数。
修改成如下可以正常使用,你的解决方案也行,不过没那么容易理解,对读者要求有些高。
function curry(fn) {
const length = fn.length
let _args = []
const invoke = (...args) => {
_args = _args.concat(args);
if (_args.length == length) {
const val = fn(..._args)
_args = []
return val
}
return invoke
}
return invoke
}
const arrfn = curry((a,b,c) => [a,b,c])
console.log(arrfn(1,2,3))
let arr = arrfn(1)(2)(3)
console.log(arr)