纯函数

作者: 季节小梅子 | 来源:发表于2019-10-22 18:42 被阅读0次

概念

纯函数是这样一种函数,与外界交换数据只要一个唯一渠道—参数和返回值。函数从外部接收的所有输入信息都通过参数传递到该函数内部,函数输出到外部的所有信息都通过返回值传递到该函数外部。
纯函数不能访问外部变量,不能修改参数。
纯函数执行过程没有副作用。

通过代码例子来理解纯函数

例子1

let a=1;
let foo = (b)=>{
  return a+b
}
foo(1)

foo函数不是一个纯函数,因为它的返回结果依赖了外部变量a。

例子2

let a=1;
let foo = (b,c)=>{
  return b+c
}
foo(1,2)

foo函数是一个纯函数,因为它的返回结果只依赖于参数b和c。

例子3

const a = 1
const foo = (obj, b) => {
  obj.x = 2
  return obj.x + b
}
const counter = { x: 1 }
foo(counter, 2)

代码里counter.x计算前是1,计算后变成了2,foo函数的执行对外部的counter产生了影响,修改counter属性的值,所以这个foo函数是有副作用的,不是纯函数。
但是如果在函数内部定义了一个变量,并且修改了这个变量,没有对外部产生影响,它是没有副作用的,是一个纯函数,看下面这个例子:
例子4

const a = 1
const foo = (b) => {
  const obj =  { x: 1 }
  obj.x = 2
  return obj.x + b
}
foo(2)

除了修改外部变量,函数在执行过程中还有很多方式可以产生副作用,比如调用DOM API修改页面,发送了ajax请求,调用window.reload刷新了浏览器,console.log往控制台打印数据,等等都是副作用。

Redux程序中的reducer就是一个纯函数,理解了纯函数,对理解Redux的源码有帮助。

相关文章

  • JS纯函数概念

    判断是否为纯函数的两个指标 纯函数和非纯函数的简单例子 1、纯函数 2、非纯函数 Redux中对使用纯函数redu...

  • 函数式编程(二)—— 纯函数

    目录 纯函数纯函数的概念Lodash——纯函数的代表体验Lodash纯函数的好处可缓存可测试并行处理副作用【函数式...

  • 4.0 C++远征:纯虚函数与抽象类

    3-1纯虚函数抽象类 [TOC] 一、纯虚函数 1.纯虚函数的定义 ​ 纯虚函数,没有函数体,同时定义时在函数...

  • 前端基础—带你理解什么是函数式编程

    框架总览 ? 引言 ? 什么是函数式编程? ? 函数是纯函数? 什么是纯函数? 函数的副作用? 使用纯函数的优点?...

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • 纯函数

    Function VS Procedures 这里的纯函数指的是在函数式编程里面的纯函数。要理解好纯函数这个概念,...

  • 函数式编程(二)

    纯函数 函数式编程中的函数,指的就是纯函数,这也是整个函数式编程的核心纯函数:相同的输入永远会得到相同的输出,而且...

  • 纯函数

    纯函数概念 相同的输入总是返回相同的输出,函数式编程依赖于纯函数 lodash:纯函数功能库const _ = r...

  • Clojure学习笔记(三)——函数式编程

    函数式编程的理念 函数式编程使得代码的编写、阅读、测试和重用都更容易了。 纯函数 函数式程序构建于纯函数之上。纯函...

  • 什么是纯函数

    “纯函数”这个概念个人觉得适用与所有的语言。什么是纯函数,纯函数有两个重要的标准,违反任何一个都不是纯函数;1、函...

网友评论

      本文标题:纯函数

      本文链接:https://www.haomeiwen.com/subject/kpjjuctx.html