卷曲功能不会更新

时间:2014-02-20 01:39:00

标签: javascript currying higher-order-functions

我试图在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);

这会一直返回下一个函数,大概是因为数组没有更新。我如何修复此错误以确保函数有效?

2 个答案:

答案 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