1

发布于 2022年 01月 21日 03:19

什么是函数式编程 数学中的函数即映射关系, eg: y= sin(x) 函数式编程用来描述(函数)之间的映射 高阶函数 可以把函数作为参数传递给另一个函数 function forEach(array, fn) { for(let i = 0; i < array.length; i++) { fn(array[i]) }}let arr = [1, 2, 3, 4, 5];forEach(arr, (v)=> { console.log(v);}) 可以把函数作为另一个函数返回结果 function makeFn() { let msg = 'hello 2020'; return function() { console.log(msg) }}const fn = makeFn()fn()makeFn()() 意义: 抽象可以帮我们屏蔽细节,只需要关注目标,高阶函数是用来抽象通用的问题 纯函数 相同的输入永远得到相同的输出 好处 可缓存 可测试 并行处理 副作用 让一个函数变的不纯 配置文件 数据库 获取用户的输入 所有外部的交互都会产生副作用 闭包: 函数和其周围的状态的引用捆绑在一起形成闭包 可以在另一个作用域中调用一个函数的内部函数并访问到该函数并访问到该函数的作用域中的成员 闭包的本质: 函数在执行的时候会放到一个执行栈上当函数执行完毕之后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依次可以访问外部函数的成员 柯里化 当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变) function makeFn() { let msg = 'hello 2020'; return function() { console.log(msg) } } const fn = makeFn() fn() makeFn()() 然后返回一个新的函数接收剩余的参数,返回结果 函子 functor 为什么学习函子 将函数式编程中将副作用控制在可控的范围内、异常处理、异步操作等 什么是函子 容器:包含值和值的变形关系(这个变形关系就是函数) 函子:是一个特殊的容器,通过一个普遍的对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系) 总结 函数式编程的运算不算直接操作值,而是由函子完成 函子就是一个实现了map契约的对象 我们可以把函子想象成一个盒子,这个盒子里封装了一个值 想要处理盒子中的值,我们需要给盒子的map方法一个处理值的函数(纯函数),由这个函数来对值进行处理 最终map方法返回一个包含新值的盒子(函子)

推荐文章