纯函数学习 (一)什么是纯函数

纯函数学习 (一)什么是纯函数

1.前言:

纯函数的定义是这样的:

纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

所以我们可以看出纯函数的定义:

  • 相同输入必定能得出相同输出。
  • 函数执行过程中没有任何副作用。

下面让我们来围绕这两点来学习纯函数。

2.辨认纯函数

纯函数和非纯函数的辨认是很难的,写的时候我们就会会出现疑惑导致出现错误,这里我将举个例子来说明它们间的区别

/**
 * 下面例子是个正例(Positive ),
 * 我们可以看出slice函数输入相同的情况下输出必定相同,
 * 而且并不会对array造成影响(内部元素并不会变化)并且也不会对其他环境造成可预见的影响,
 * 所以我们可以说slice是纯函数
 **/
let array = [0,1,2,3,4];

array.slice(0,3);//[0,1,2]
array.slice(0,3);//[0,1,2]
console.log(array);//[0,1,2,3,4]

/**
 *	下面例子是个反例(negative),
 *	可以看见纵使输入相同输出是不定的,
 *	并且函数修改了原始数组(副作用),
 *	这是个完美的非纯函数
 **/
let array2 = [0,1,2,3,4];
array.splice(0,3);//[0,1,2]
array.splice(0,3);//[3,4]
console.log(array);//[]

从上面的例子就能很容易看出所谓副作用就是:

在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互

副作用可能包含,但不限于:

  • 更改文件系统
  • 往数据库插入记录
  • 发送一个 http 请求
  • 可变数据
  • 打印/log
  • 获取用户输入
  • DOM 查询
  • 访问系统状态

副作用让一个函数变得不纯是有道理的:从定义上来说,纯函数必须要能够根据相同的输入返回相同的输出;如果函数需要跟外部事物打交道,那么就无法保证这一点了。

3.结语

以上就是纯函数的定义阐述,从这里的初步了解我们可以看出纯函数是个非常特殊的“工具”,自带“不动”和“避世”属性,这就让纯函数有很多独特的特性,明天我将带大家学习为什么要使用纯函数。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值