函数式编程关心数据的映射,命令解决问题的步骤。
高阶函数就是参数为函数或返回值为函数的函数。
命令式:通过编写多条指令让计算机执行一些动作,其中一般都会涉及到很多繁杂的细节。
声明式:通过表达式的方式来声明我们想做什么,而不是通过多条指示。
纯函数(函数式编程的基石,无副作用的函数)
纯函数相对于非纯函数来说,在可缓存性、可移植性、可测试性以及并行计算方面都有着巨大的优势。
函数柯里化
将一个低阶函数转换为高阶函数的过程就叫柯里化。
function curry (fn, currArgs) {
return function() {
let args = [].slice.call(arguments);
// 首次调用时,若未提供最后一个参数currArgs,则不用进行args的拼接
if (currArgs !== undefined) {
args = args.concat(currArgs);
}
// 递归调用
if (args.length < fn.length) {
return curry(fn, args);
}
// 递归出口
return fn.apply(null, args);
}
}