Skip to content

js纯函数

函数式编程中有一个非常重要的概念叫纯函数,js符合函数式编程的范式,所以也有纯函数的概念

  • 在react开发中纯函数是被多次提及的
  • 比如react中组件就被要求像是一个纯函数(为什么是像,因为还有class组件),redux中有一个reducer的概念,也是要求必须是一个纯函数

纯函数的定义:

  • 确定的输入,一定会产生确定的输出
  • 汗啊输在执行过程中,不能产生副作用

什么叫副作用:

  • 表示在执行一个函数时,除了返回函数值之外,还对调用函数产生了附加的影响,比如修改了全局变量,修改参数或者改变外部的存储

纯函数在执行的过程中就是不能产生副作用

纯函数的案例

  • slice:slice截取数组时不会对原数组进行任何操作,而是生成一个新的数组
  • splice:splice截取数组,会返回一个新的数组,也会对原数组进行修改
jsx
var names = ['abc', 'cba', 'nba', 'dna']

// slice截取数组时不会对原数组进行任何操作,而是生成一个新的数组
var newNames = names.slice(0, 2)

// splice截取数组,会返回一个新的数组,也会对原数组进行修改
var newNames2 = names.splice(0, 2)

react中就要求我们无论是函数还是class声明一个组件,这个组件都必须像纯函数一样,保护他们的props不被修改

在redux中,reducer也被要求是一个纯函数

redux的安装

bash
npm install redux