简单版:
function curring(x){
return function(y){
return x+y;
}
}
curring(1)(2) //3
缺点是参数个数是固定的,
高级点的:
function curring(){
var argList=Array.prototype.slice.call(arguments);
return function(){
if(arguments.length==0){
var sum=0;
var len=argList.length;
for(var i=0;i<len;i++){
sum+=argList[i];
}
return sum
}
else{
argList=argList.concat([].slice.call(arguments));
return arguments.callee
}
}
}
更高级的:
function curring(fn){
var argList=Array.prototype.slice.call(arguments,1);
return function(){
if(arguments.length==0){
fn.apply({},argList)//fn(argList)也可以,但传入的函数需要有一个参数接受argList变量
}
else{
argList=argList.concat([].slice.call(arguments));
return arguments.callee
}
}
}