纯函数的概念
文章目录
- 纯函数的概念
- 纯函数的两种形式:
- 调用目标本身,不会改变
- 函数内部,不受函数外部影响
- 函数的副作用
- 如何理解"相同的输入得到相同的输出"
- 不是纯函数的映射关系
- 是纯函数的映射关系
纯函数的两种形式:
调用目标本身,不会改变
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值
不是纯函数的映射关系
是纯函数的映射关系