定义

一个函数的返回结果只依赖它的参数,而且在计算过程中不会产生其他副作用,也就是不会对外部的数据造成影响或改变。

理解:函数的返回结果只依赖它的参数

const a= 1;

const b= (c) => {  a + b }

b ( 2 );  //3

  b()并不是一个纯函数,因为它的返回结果依赖外部的变量a, 虽然函数b()自身没有变化,但如果a发生变化,返回结果就会变化

  计算过程中不会产生其他副作用

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

往里面传一个对象进行计算,计算的过程里面并不会对传入的对象进行修改,计算前后的 counter 不会发生任何变化,计算前是 1,计算后也是 1,它现在是纯的。但是我再稍微修改一下它:

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

现在情况发生了变化,我在 func 内部加了一句 obj.x = 2,计算前 counter.x 是 1,但是计算以后 counter.x 是 2。func函数的执行对外部的 counter 产生了影响,它产生了副作用,因为它修改了外部传进来的对象,现在它是不纯的。

JavaScript—纯函数的更多相关文章

  1. JavaScript 面试:什么是纯函数?

    原文:Eric Elliott  译文:众成翻译 www.zcfy.cc/article/master-the-javascript-interview-what-is-a-pure-function ...

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

    JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...

  3. JavaScript使用纯函数避免bug

    纯函数 一.纯函数 定义:纯函数是指不依赖并且不修改其作用域之外的函数.通过以下几个示例来认识纯函数: var a = 10; //纯函数 function foo(num){ return num ...

  4. JavaScript创建函数的方式

    在JavaScript中,创建函数是比较常见的操作,但是JavaScript中怎么创建函数呢,有几种方式可以创建函数呢?在JavaScript一般有三种方式创建对象1.函数声明方式格式:functio ...

  5. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  6. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  7. 5种 JavaScript 调用函数的方法

    一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性 ...

  8. javascript escape()函数和unescape()函数

    javascript escape()函数和unescape()函数 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法: escape(string) stri ...

  9. JavaScript调用函数的方法

    摘要:这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正 ...

随机推荐

  1. R分析实现对招聘网站薪资预测分析

    1.首先确定数据分析目标——薪酬受哪些因素影响 确定变量: 因变量:薪资 自变量:(定性)-- 公司类别.公司规模.地区.行业类别.学历要求.软件要求. (定量)-- 经验要求(数值型) 分析目标:建 ...

  2. gitbook简单教程

    简介 GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书.GitBook支持输出以下几种文档格式 静态站点:GitBook ...

  3. 004.Oracle数据库 , 查询多字段连接合并

    /*Oracle数据库查询日期在两者之间*/ SELECT PKID , OCCUR_DATE, PKID || TO_CHAR( OCCUR_DATE, ' yyyy/mm/dd hh24:mi:s ...

  4. 011、MySQL取14天前Unix时间戳

    #取14天前时间戳 SELECT unix_timestamp( DATE_SUB( curdate( ), INTERVAL DAY ) ); 效果如下: 不忘初心,如果您认为这篇文章有价值,认同作 ...

  5. python SSTI绕过

    原理首先以jinja2模板注入为例:{{request[request.args.param]}} 可以用 {{request|attr(request.args.param)}} 替代绕过" ...

  6. Consul 简介及集群安装

    简介 Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册.服务发现和配置管理的功能. Consul的功能都很实用,其中包括:服务注册/发现.健康检查.Key/Value ...

  7. POJ 1256:Anagram

    Anagram Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18393 Accepted: 7484 Description ...

  8. Day4-T4

    原题目 Describe:建个图,连通后删边 [ 如果把 !dis[i][j] 全部定义为INF会更好理解 ] .先特判,再贪心求总数 code: #pragma GCC optimize(2) #i ...

  9. 联系我们地图坐标展示js

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=6d88 ...

  10. 实验吧-隐写术-男神一般都很低调很低调的!!(stegsolve->Image Combiner + DES加密)

    先介绍一下DES加密:(也可参考https://blog.csdn.net/zz_Caleb/article/details/87016017,第14个) 1)对称加密,参考:对称加密和非对称加密 2 ...