定义:纯函数是指不依赖于 且 不改变 它作用域之外的变量状态的函数。
也就是说,纯函数的返回值只由它调用时的参数决定,它的执行不依赖于系统的状态(比如:何时、何处调用它。
例子:
例1:
非纯函数:
var values = { a: 1 };
function impureFunction ( items ) {
var b = 1;
items.a = items.a * b + 2;
return items.a;
}
var c = impureFunction( values );// 现在 `values.a` 变成 3。impureFunction 改变了它,所以不纯。
纯函数:
var values = { a: 1 };
function pureFunction ( a ) {
var b = 1;
a = a * b + 2;
return a;
}
var c = pureFunction( values.a );
// `values.a` 没有被改变, 它的值仍然是 1
例2:
非纯函数:
var values = { a: 1 };
var b = 1;
function impureFunction ( a ) {
a = a * b + 2;
return a;
}
var c = impureFunction( values.a );
// c 的值依赖于外部变量 b
// 你可能容易忽略这种情况,外部变量的变化也可能会导致函数出现不确定结果。
纯函数:
var values = { a: 1 };
var b = 1;
function pureFunction ( a, c ) {
a = a * c + 2;
return a;
}
var c = pureFunction( values.a, b );
// 这样从定义上明确 `c` 依赖于参数 `b`,避免函数不确定结果。