课程名称:破解JavaScript高级玩法
课程章节:第6章 从函数到函数式编程之路
主讲老师:Cloud
课程内容:
今天学习的内容包括:
6-5 纯函数,副作用,高阶函数等函数式编程概念——纯函数的优点作用等。
课程收获:
编程范式–面向过程编程
- 特点:主要采取过程调用或函数调用的方式来进行流程控制。流程则由包涵一系列运算步骤的过程,子程序,方法或函数来控制。
- 代表:C语言等
编程范式-面向对象编程
- 特点∶它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
- 代表:Python, C++,Java,C#等
编程范式–函数式编程
- 特点︰函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。
- 代表:Haskell , Scala等
函数式编程的优点
- 代码简洁,优雅
- 语法灵活,复用性高
- 容易测试
- 易升级
- 并发友好
- 可维护性好
纯函数
- 定义∶纯函数就是相同的输入,永远得到相同的输出,并且没有任何副作用。
- 同入同出
- 无副作用
纯函数的案例
- 普通的例子
- 数组
- redux中的reducer, reducer的准则就是要纯函数
纯函数的优点
- 安全:无副作用,不破坏外面的状态
- 可测试:入参固定,输出固定,好断言
- 可缓存:同入同出,便于缓存,提升效率
函数的副作用
- 定义∶函数调用时,除了返回函数值之外,还对外界产生附加的影响。
副作用包含哪些?
- 修改了变量
- 修改了入参
- 输出了日志
- 操作客户端存储
- 操作了DOM
- 与service worker,iframe通讯
- 发送了Http请求
- 其他不该做的事情
高阶函数
- 定义∶就是一个接受函数作为参数或者函数作为输出返回的函数
- 特征∶函数入参,函数作为返回值,满足任一条件即可
高阶函数
- 数组中用到的高阶函数
- Array.prototype.filter
- Array.prototype.find
- Array.prototype.map
高阶函数的应用
- 柯里化
- Function.prototype.bind
高阶函数衍生-高阶组件
- 定义:包装了另外一个组件的组件
其他函数式编程的概念
- compose (组合), pipe(管道)
- 偏函数,柯里化
- chain链式调用
思考题
- 幂等性和纯函数的相似和区别
今天 学习了 纯函数,副作用,高阶函数等函数式编程概念,了解了纯函数的一些特性,也发现在日常工作中,我们常常使用纯函数和高阶组件等,今天形成了一个整体画像。对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~