函数式编程#3纯函数的概念
纯函数的概念
文章目录
- 纯函数的概念
- 纯函数的两种形式:
- 调用目标本身,不会改变
- 函数内部,不受函数外部影响
- 函数的副作用
- 如何理解"相同的输入得到相同的输出"
- 不是纯函数的映射关系
- 是纯函数的映射关系
纯函数的两种形式:
调用目标本身,不会改变
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纯函数的概念相关推荐
- JavaScript函数式编程(纯函数、柯里化以及组合函数)
JavaScript函数式编程(纯函数.柯里化以及组合函数) 目录 JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 1.纯函数 1.1.纯函数的概念 1.2.副作用 1.3.纯函数 ...
- 函数式编程:一等函数(First-class Function)
函数式编程:一等函数(First-class Function) 说起函数式编程,不得不提的是First-class Function的概念,有些文章把它翻译成"第一类函数",有些 ...
- python学习——函数式编程——高阶函数
python学习--函数式编程--高阶函数 函数式编程(高阶函数):1:map && reduce; 2 : filter; 3: sorted; ------------------ ...
- 高阶函数||编程范式: 命令式编程/声明式编程 || 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
编程范式: 命令式编程/声明式编程 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数) 高阶函数 filter/map/reduce filter中的回调函数有一个要求: 必须返 ...
- Redux的基础用法详解(纯函数的概念)
前言 和vue中的vuex一样,react也有进行状态管理的工具,最近自己在学习这一块的内容所以在此记录一下 什么是Redux Redux是JS的状态容器,提供了可预测的状态管理.JavsScript ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...
- 函数式编程(一):概念及特点
概念: 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 它属于"结构化编程&quo ...
- 【一天时间|JavaScript进阶】函数式编程高阶函数的应用
一天时间系列文章是博主精心整理的面试热点问题和难点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速并高效地审视前端面试知识.直击技术痛点,主动出击,精密打击,这才是面试拿到高薪的秘诀 ...
最新文章
- cell 滑动实现旋转动画效果
- 让英文版windows 8支持非Unicode程序的语言方法
- BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
- Android内存管理
- 织梦配置多个mysql_一台机器,多个mysqld服务
- MyBatisPlus中updateById与updateAllColumnById方法区别
- k8s架构组件功能介绍
- 20张图表达程序员的心酸
- Win10笔记本可以搜索到邻居WiFi却搜不到自家的??
- 轨迹跟踪主要方法_带你入门多目标跟踪(一)领域概述
- 正则 0个或多个_正则表达式一知半解
- yum安装Jenkins
- 项目总结:初稿与定稿,方向相差180度
- 【第一组】第十五次冲刺例会纪要
- Windows 通过bat脚本启动Eureka,Cassandra和redis-server
- 微商客源如何引流?坚持操作喜马拉雅日引50+粉丝
- Power BI业绩杜邦分析
- 《C#多线程编程实战》读书笔记
- 微信公众号教程(7)新浪云计算平台注册和使用
- 洛谷 P2357 守墓人
热门文章
- XPwn黑客破解秀,16位网红见证黑掉小米
- SAP如何将物料账期跨年月一次性开到当前
- arcgis地图开发测面、测距、定位小工具
- win11怎么共享文件夹 Windows11共享文件夹的设置方法
- 1631 小鲨鱼在51nod小学 暴力
- Javaweb8==通过tomcat访问到一段代码并执行,同时读取前端数据和从后端给前端返回数据。通过继承javaEE的HttpServlet类。实现登录注册功能和前端界面。
- 值班c语言程序,5.值班安排C语言程序报告.doc
- 不使用microscale库从siwarex ms读重量值
- 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春
- 微信公众平台开发[3] —— 微信公众号支付功能(PHP)