我试图在JavaScript中编写一个currying函数,内部函数不会更新数组args的值:
var myCurry=function(fn)
{
var len=fn.length;
var _slice=Array.prototype.slice;
var args=_slice.call(arguments,1);
console.log(args.length);
return function next()
{
var rem=_slice.call(arguments,0)
args.concat(rem);
console.log(args.length);
if(len<=args.length)
return fn.apply(null,args);
else
return next;
}
}
我称之为:
var _sum=myCurry(sum,2);
var res=_sum(2);
var res2=res(3,4);
console.log(res2);
这会一直返回下一个函数,大概是因为数组没有更新。我如何修复此错误以确保函数有效?
答案 0 :(得分:2)
这是因为.concat()
不会改变数组。如果您想改变原文,请使用.push()
。
args.push.apply(args, rem);
或者,如果您不关心原件是否已被替换,只需指定.concat()
args = args.concat(rem);
答案 1 :(得分:1)
糟糕:
args.concat(rem);
相反:
args = args.concat(rem);
concat()
不执行就地修改。它返回一个新的Array