关于js高程的函数柯里化的有关问题
关于js高程的函数柯里化的问题
这段在js高级程序设计第三版 P604 的代码,讲函数柯里化的。
“ 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');
------解决思路----------------------
这段在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');