函数式编程#3纯函数的概念

纯函数是指在编程中,每次调用时给定相同的输入总会返回相同输出的函数,且不产生副作用。如JavaScript中的`slice`是纯函数,因为它不改变原数组,而`splice`则不是。纯函数内部不依赖外部状态,确保了可预测性和可测试性。函数的副作用指执行过程中对非局部状态的修改,纯函数的目标是实现无副作用。‘相同的输入得到相同的输出’是纯函数的核心特性,反映了一种数学上的映射关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纯函数的概念

纯函数的两种形式:

调用目标本身,不会改变

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值

不是纯函数的映射关系

请添加图片描述

是纯函数的映射关系

请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值