柯里化是指這樣一個函數(shù)(假設叫做createCurry),他接收函數(shù)A作為參數(shù)衰倦,運行后能夠返回一個新的函數(shù)袒炉。并且這個新的函數(shù)能夠處理函數(shù)A的剩余參數(shù)。
function curry(fn){
var args = Array.prototype.slice.call(arguments, 1);
return function(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return fn.apply(null, finalArgs);
};
}
curry()函數(shù)可以按以下方式應用樊零。
function add(num1, num2){
return num1 + num2;
}
var curriedAdd = curry(add, 5);
alert(curriedAdd(3)); //8
在這個例子中我磁,創(chuàng)建了第一個參數(shù)綁定為5 的add()的柯里化版本孽文。當調用curriedAdd()并傳
入3 時,3 會成為add()的第二個參數(shù)夺艰,同時第一個參數(shù)依然是5芋哭,最后結果便是和8。你也可以像下面例子這樣給出所有的函數(shù)參數(shù):
function add(num1, num2){
return num1 + num2;
}
var curriedAdd = curry(add, 5, 12);
alert(curriedAdd()); //17
函數(shù)柯里化還常常作為函數(shù)綁定的一部分包含在其中郁副,構造出更為復雜的bind()函數(shù)减牺。例如:
function bind(fn, context){
var args = Array.prototype.slice.call(arguments, 2);
return function(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return fn.apply(context, finalArgs);
};
}