纯函数的概念

文章目录

  • 纯函数的概念
    • 纯函数的两种形式:
      • 调用目标本身,不会改变
      • 函数内部,不受函数外部影响
    • 函数的副作用
    • 如何理解"相同的输入得到相同的输出"
      • 不是纯函数的映射关系
      • 是纯函数的映射关系

纯函数的两种形式:

调用目标本身,不会改变

slice调用后,数组本身不会被改变,可称为纯函数
splice调用后,数组本身发生改变,不是纯函数

var xs = [1,2,3,4,5];// 纯的
xs.slice(0,3);
//=> [1,2,3]xs.slice(0,3);
//=> [1,2,3]xs.slice(0,3);
//=> [1,2,3]
// 不纯的
xs.splice(0,3);
//=> [1,2,3]xs.splice(0,3);
//=> [4,5]xs.splice(0,3);
//=> []

函数内部,不受函数外部影响

当变量min防止函数外界,此时min的值可能会被改变,从而影响函数本身返回的结果,所以不是纯函数;

当变量min放置函数内部,此时变量存在于函数内部,调佣函数整体时,不会被改变,此时函数的返回结果是预期可控的,所以可称为纯函数

通过Object.freeze()可创建,不可更改内部属性的对象

// 不纯的
var min = 21;var checkAge = function(age) {return age >= min;
};
// 纯的
var checkAge = function(age) {var min = 21;return age >= min;
};

函数的副作用

函数在执行过程中,发生超出预期以外的影响,统称为副作用

纯函数,保证了没有副作用的理念是-“相同的输入得到相同的输出”

如何理解"相同的输入得到相同的输出"

是数学上的映射,是一对一的映射,不是一对多的映射。一个x值只有一个y值与它对应,多个x值可指向同一个y值

不是纯函数的映射关系

是纯函数的映射关系


函数式编程#3纯函数的概念相关推荐

  1. JavaScript函数式编程(纯函数、柯里化以及组合函数)

    JavaScript函数式编程(纯函数.柯里化以及组合函数) 目录 JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 1.纯函数 1.1.纯函数的概念 1.2.副作用 1.3.纯函数 ...

  2. 函数式编程:一等函数(First-class Function)

    函数式编程:一等函数(First-class Function) 说起函数式编程,不得不提的是First-class Function的概念,有些文章把它翻译成"第一类函数",有些 ...

  3. python学习——函数式编程——高阶函数

    python学习--函数式编程--高阶函数 函数式编程(高阶函数):1:map && reduce; 2 : filter; 3: sorted; ------------------ ...

  4. 高阶函数||编程范式: 命令式编程/声明式编程 || 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)

    编程范式: 命令式编程/声明式编程 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数) 高阶函数 filter/map/reduce filter中的回调函数有一个要求: 必须返 ...

  5. Redux的基础用法详解(纯函数的概念)

    前言 和vue中的vuex一样,react也有进行状态管理的工具,最近自己在学习这一块的内容所以在此记录一下 什么是Redux Redux是JS的状态容器,提供了可预测的状态管理.JavsScript ...

  6. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  7. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  8. 函数式编程(一):概念及特点

    概念: 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 它属于"结构化编程&quo ...

  9. 【一天时间|JavaScript进阶】函数式编程高阶函数的应用

    一天时间系列文章是博主精心整理的面试热点问题和难点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速并高效地审视前端面试知识.直击技术痛点,主动出击,精密打击,这才是面试拿到高薪的秘诀 ...

最新文章

  1. cell 滑动实现旋转动画效果
  2. 让英文版windows 8支持非Unicode程序的语言方法
  3. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
  4. Android内存管理
  5. 织梦配置多个mysql_一台机器,多个mysqld服务
  6. MyBatisPlus中updateById与updateAllColumnById方法区别
  7. k8s架构组件功能介绍
  8. 20张图表达程序员的心酸
  9. Win10笔记本可以搜索到邻居WiFi却搜不到自家的??
  10. 轨迹跟踪主要方法_带你入门多目标跟踪(一)领域概述
  11. 正则 0个或多个_正则表达式一知半解
  12. yum安装Jenkins
  13. 项目总结:初稿与定稿,方向相差180度
  14. 【第一组】第十五次冲刺例会纪要
  15. Windows 通过bat脚本启动Eureka,Cassandra和redis-server
  16. 微商客源如何引流?坚持操作喜马拉雅日引50+粉丝
  17. Power BI业绩杜邦分析
  18. 《C#多线程编程实战》读书笔记
  19. 微信公众号教程(7)新浪云计算平台注册和使用
  20. 洛谷 P2357 守墓人

热门文章

  1. XPwn黑客破解秀,16位网红见证黑掉小米
  2. SAP如何将物料账期跨年月一次性开到当前
  3. arcgis地图开发测面、测距、定位小工具
  4. win11怎么共享文件夹 Windows11共享文件夹的设置方法
  5. 1631 小鲨鱼在51nod小学 暴力
  6. Javaweb8==通过tomcat访问到一段代码并执行,同时读取前端数据和从后端给前端返回数据。通过继承javaEE的HttpServlet类。实现登录注册功能和前端界面。
  7. 值班c语言程序,5.值班安排C语言程序报告.doc
  8. 不使用microscale库从siwarex ms读重量值
  9. 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春
  10. 微信公众平台开发[3] —— 微信公众号支付功能(PHP)