函数柯里化

定义

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。

意义

下面是我个人的理解,不知是否正确,可能需要在往后的工作中不断去实践才知道柯里化的好处。

function add(x,y){
  return x + y;
}
add(1,2);//3
add(1,3);//4
add(1,4);//5
//我们每次都用到了1,但我们可能也会用到其他数字
var add = function(x) {
  return function(y) {
    return x + y;
  };
};

var increment = add(1);

increment(2);// 3

increment(3);// 4

其实就是相当于,在函数被多次调用,参数不能确定,但有可能出现相同参数的时候,第二种写法的适用性就更强了。

柯里化函数代码及例子
var currying = function(fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        var newArgs = args.concat([].slice.call(arguments));
        return fn.apply(null, newArgs);
    };
};
var add = function (num1, num2, num3){
   return num1 + num2 + num3;
}
var increment1 = currying(add, 1);
// 假设很多地方调用add函数,其中都传入了一个参数 1,那么我们就可以先确定一个参数,然后再多次调用
var result1 = increment1(2, 3);// 6
var result2 = increment1(3, 4);// 8
// 上面两次调用,3也重复了,那么我们又可以这样做
var increment2 = currying(add, 1, 3);
var result1 = increment2(2);// 6
var result2 = increment2(4);// 8
利用函数柯里化进行Dom操作

比如页面有三个灰色的div,我点击下面按钮需要呈现的不同效果

函数柯里化_第1张图片
QQ图片20170506203513.png

可以确定的是,无论点击哪一个按钮,第一个都要变红。
利用currying函数

var currying = function(fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        var newArgs = args.concat([].slice.call(arguments));
        return fn.apply(null, newArgs);
    };
};
var changeRed = function(){
    var blockArr = [].slice.call(arguments);
    for(var i=0;i

接下来,我们只需要让按钮点击去执行toRed函数就行了





总结

如果一个函数,其中一个或多个参数可能相同的情况下,我们不需要再次定义一个函数(这个函数的参数将相同的参数设为运算时固定的值),函数柯里化,从程序表达的角度出发,提高了函数的适用性。

你可能感兴趣的:(函数柯里化)