函数式编程是一个很古老的概念,早于第一台计算机的诞生。
什么是函数式编程
- 函数式编程是用来描述数据(函数)之间的映射。
- 函数式编程中的函数指的不是程序中的函数(方法),而是数学中的函数即映射关系。如:y=sin(x),x和y的关系。
- 相同的输入始终要得到相同的输出(纯函数)。
// 非函数式
let num1 = 2;
let num2 = 3;
let sum = num1 + num2;
console.log(sum);
// 函数式
function sum (a, b){
return a + b;
}
console.log(sum(2, 3));
lodash中的组合函数
使用lodash中的flowRight组合函数,实现一个数组的最后一个元素大写。
import _ from 'lodash';
const reverse = arr => arr.reverse();
const first = arr => arr[0];
const toUpper = str => str.toUpperCase();
// 最先执行的函数参数,在最后一个参数位置
const fn = _.flowRight(toUpper, first, reverse);
console.log(fn(['one', 'two', 'three']));
// THREE
组合函数实现原理
function compose(...args){
return function (val){
return args.reverse().reduce((acc, fn)=>{
return fn(acc)
}, val)
}
}