关于js高程的函数柯里化的有关问题

关于js高程的函数柯里化的问题
本帖最后由 jonzrj 于 2014-03-12 10:44:10 编辑
    这段在js高级程序设计第三版 P604 的代码,讲函数柯里化的。
“ finalArgs = args.concat(innerArgs);”这行我看不懂,为什么要连接args和innerArgs,innerArgs不是包含了fn了吗,这样下一行执行为什么不会有问题?
                return fn.apply(null, finalArgs);//这里为什么不用args的包含的参数,而用finalArgs,换句话,这个finalArgs为什么要创建?


function curry(fn){
            var args = Array.prototype.slice.call(arguments, 1);
            return function(){
                var innerArgs = Array.prototype.slice.call(arguments),
                    finalArgs = args.concat(innerArgs);//为什么要连接args和innerArgs,innerArgs不是包含了fn了吗,这样下一行执行为什么不会有问题?
                return fn.apply(null, finalArgs);//这里为什么不用args的包含的参数,而用finalArgs,换句话,这个finalArgs为什么要创建?
            };
        }


------解决思路----------------------
关键是args, 用到一个叫闭包的概念。

function lev1(a1,a2,a3,a4){

}
var lev2 = curry(lev1,'AA','BB');
lev2('add3','add4');
------解决思路----------------------

function curry(fn){
var args = Array.prototype.slice.call(arguments, 1);//將curry的參數除fn外組成一個數組
return function(){
var innerArgs = Array.prototype.slice.call(arguments), //這里的arguments是指此匿名函數的參數列表,非curry的
finalArgs = args.concat(innerArgs);//將curry除fn外的參婁與匿名函數的參數組成一個新的數組
return fn.apply(null, finalArgs);
};
}
var a = curry(function(m, n){alert([m, n].join(' '))}, 'I am');
a('here');