函数柯里化,用于创建已经设置好了一个或多个参数的函数。函数柯里化的基本方法和函数绑定是一样的:使用一个闭包返回一个函数。两者的区别在于,当函数被调用时,返回的函数还需要设置一些传入的参数。
函数柯里化通常由一下步骤动态创建:调用另一个函数并为它传入要柯里化的函数和必要参数。
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()函数的主要工作就是将被返回函数的参数进行排序。curry()的第一个参数是要进行柯里化的函数,其他参数是要传入的值。它返回另一个函数,该函数被调用时,会返回调用原始函数的结果,并传递调用curry时的参数加上当前的参数。它使用Array的concat方法连接两个参数数组。
curry()函数可以按以下方式应用。
function add(num1,num2){
return num1 + num2;
}
var curriedAdd = curry(add,5);
console.log(curriedAdd(3))
在这个例子中,创建了第一个参数绑定为5的add()的柯里化版本。当调用curriedAdd并传入3时,3会称为add()的第二个参数,同时第一个参数依然是5,最后结果便是和8。