纯函数是指不依赖于上下文环境 且 不改变它作用域之外的变量状态的函数。
也就是说,纯函数的返回值只由它调用时的参数决定,它的执行不依赖于系统的状态(比如:何时、何处调用它——译者注)。
案例
var values = { a: 1 };
function pureFunction ( a ) {
var b = 1;
a = a * b + 2;
return a;
}
var c = pureFunction( values.a );
// values.a 没有被改变,它的值仍然是 1
上面的代码,我们只计算了作用域内的局部变量,没有任何作用域外部的变量被改变,因此这个函数是“纯函数”。
var values = { a: 1 };
var b = 1;
function impureFunction ( a ) {
a = a * b + 2;
return a;
}
var c = impureFunction( values.a );
// 实际上,c 的值依赖于外部变量 b .
// 你可能容易忽略这种情况,外部变量的变化也可能会导致函数出现不确定结果。
上面的代码里,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 ,避免函数不确定结果。
上面这样改就成了“纯函数”。
总结
使用纯函数的好处
最主要的好处是没有副作用。纯函数不会修改作用域之外的状态,做到这一点,代码就变得足够简单和清晰:当你调用一个纯函数,你只要关注它的返回值,而不用担心因为别处的问题导致错误。
纯函数是健壮的,改变执行次序不会对系统造成影响,因此纯函数的操作可以并行执行。
纯函数非常容易进行单元测试,因为不需要考虑上下文环境,只需要考虑输入和输出。
最后,尽可能使用纯函数让你的代码保持简单和灵活。(解耦) (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|