持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
函数式编程
函数式编程倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算。
函数式编程有两个基本的运算:合成(compose)和柯里化 (Currying)
合成(compose)
如果一个值要经过多个函数,才能变成另外一个值,就可以把所有中间步骤合并成一个函数,这叫做函数合成。
合成的好处是,它让代码变得简单而富有可读性,比较灵活,同时通过不同的组合方式,可以轻易组合出其他常用函数,让代码更具有表现力。
举个栗子:

看输出结果:

这里面明显简化了一些繁琐的代码,增加可读性,这段代码是第二个函数运行时总是拿到上一个函数返回的值,如果这种操作很多的情况下,那就显得特别繁琐臃肿冗余。这里用了reduce函数去合并这些函数。
柯里化(Currying)
柯里化,又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一的参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数技术。
所谓柯里化,就是把一个多参数的函数,转换为单参数的函数。
举个栗子:
柯里化之前:
function add(a,b){
return a+b
}
add(1,2);//3
柯里化后:
function add(a){
return function(b){
return a+b
}
}
add(1)(2);//3
可以这样调用上述函数:(add(1))(2)或者add(1)(2)。
上述代码柯里化之前是一次性传了2个参数,而柯里化后,是先传了一个参数,闭包保存着,然后有记着这个a参数值,最后直接可以计算,最后返回这个内部的新函数以及值。
再看一个栗子:
function add(a){
return function(b){
return a+b
}
}
var result1=add(1);
var result2=add(3);
result(2); //3
result2(5); //8
这里也是定义了一个add函数,它接受一个参数并返回一个新函数。调用add之后,返回的函数就通过闭包的范式记住了add的第一个参数。一次性的调用它太过于繁琐,好在可以使用一个特殊的curry帮助函数是这类函数定义和调用更加容易。