乐趣区

关于前端:函数式编程高阶函数闭包纯函数

什么是函数式编程

函数式编程(Functional Programming, FP),FP 是编程范式之一,咱们常据说的编程范式还有面向过程 编程、面向对象编程。

  1. 面向对象编程的思维形式:把事实世界中的事物形象成程序世界中的类和对象,通过封装、继承和 多态来演示事物事件的分割
  2. 函数式编程的思维形式:把事实世界的事物和事物之间的分割形象到程序世界(对运算过程进行抽 象)
  • 程序的实质:依据输出通过某种运算取得相应的输入,程序开发过程中会波及很多有输出和 输入的函数
  • x -> f(分割、映射) -> y,y=f(x)
  • 函数式编程中的函数指的不是程序中的函数(办法),而是数学中的函数即映射关系,例如:y = sin(x),x 和 y 的关系
  • 雷同的输出始终要失去雷同的输入(纯函数)
  • 函数式编程用来形容数据 (函数) 之间的映射

前置常识

  1. 函数是一等公民
  2. 高阶函数
  3. 闭包

函数是一等公民

  • 函数能够存储在变量中
  • 函数作为参数
  • 函数作为返回值

在 JavaScript 中函数就是一个一般的对象 (能够通过 new Function() ),咱们能够把函数存储到变量 / 数组中,它还能够作为另一个函数的参数和返回值,甚至咱们能够在程序运行的时候通过 new Function(‘alert(1)’) 来结构一个新的函数。

函数能够存储在变量中

函数作为参数

高阶函数

  • 什么是高阶函数
  1. 能够把函数作为参数传递给另一个函数
  2. 能够把函数作为另一个函数的返回后果

  • 应用高阶函数的意义
  1. 形象能够帮咱们屏蔽细节,只须要关注咱们的指标
  2. 高阶函数是用来形象通用的问题

闭包

  1. 闭包 (Closure):函数和其四周的状态 (词法环境) 的援用捆绑在一起造成闭包。
  2. 能够在另一个作用域中调用一个函数的外部函数并拜访到该函数的作用域中的成员

闭包的实质:函数在执行的时候会放到一个执行栈受骗函数执行结束之后会从执行栈上移除,然而堆上的作用域成员因为被内部援用不能开释,因而外部函数仍然能够拜访内部函数的成员

闭包案例

纯函数

  1. 纯函数:雷同的输出永远会失去雷同的输入,而且没有任何可察看的副作用
  2. 纯函数就相似数学中的函数(用来形容输出和输入之间的关系),y = f(x)

  1. lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库(lodash 的 fp 模块提供了对函数式编程敌对的办法),提供了对数组、数字、对象、字符串、函数等操作的一些办法
  2. 数组的 slice 和 splice 别离是:纯函数和不纯的函数
  • slice 返回数组中的指定局部,不会扭转原数组
  • splice 对数组进行操作返回该数组,会扭转原数组

纯函数的益处

  • 可缓存: 因为纯函数对雷同的输出始终有雷同的后果,所以能够把纯函数的后果缓存起来

本人模仿一个 memoize 函数

  • 可测试: 纯函数让测试更不便
  • 并行处理: 在多线程环境下并行操作共享的内存数据很可能会出现意外状况, 纯函数不须要访问共享的内存数据,所以在并行环境下能够任意运行纯函数 (Web Worker)

副作用

副作用让一个函数变的不纯(如上例),纯函数的依据雷同的输出返回雷同的输入,如果函数依赖于内部的状态就无奈保障输入雷同,就会带来副作用。

副作用起源:

  1. 配置文件
  2. 数据库
  3. 获取用户的输出……

所有的内部交互都有可能带来副作用,副作用也使得办法通用性降落不适宜扩大和可重用性,同时副作用会给程序中带来安全隐患给程序带来不确定性,然而副作用不可能齐全禁止,尽可能管制它们在可控范畴内产生

本周是学习 拉钩教育大前端 课程的第二周, 总结上周次要学习了 函数式编程, 函数柯里化, 函子以及 promise 的手动实现等. 在此之前, 都是从淘宝或者咸鱼购买一些视频观看学习, 这种形式存在三个弊病:

  1. 视频内容曾经过期已久, 照着视频写的代码常常会无奈运行;
  2. 遇到问题无奈解决时只能硬着头皮去百度, 还不肯定能解决问题;
  3. 遇到无奈解决的问题容易卡住从而放弃, 进而去寻找更好的资源, 工夫都节约在找资源下面了

而参加这一套课程就完满解决了这些问题, 每周都有老师直播解决学院的问题, 争取本周的问题在本周之内解决, 另外课程有考核机制, 须要提交作业, 通过之后能力解锁下一个学习模块, 这样就不会呈现眼高手低, 只会看不会做的状况了, 而且率领咱们学习的老师都很友善, 无论是学习问题还是生存下面的问题基本上都能提供一些解决方案. 另外咱们还有两个大群供学员们交流学习, 对技术的进步有着至关重要的作用.

退出移动版