JS函数: 纯函数

函数

函数是指不依赖于上下文环境 且 不改变它作用域之外的变量状态的函数

也就是说,纯函数的返回值只由它调用时的参数决定,它的执行不依赖于系统的状态(比如:何时、何处调用它——译者注)。

案例

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,避免函数不确定结果。

上面这样改就成了“纯函数”。

总结

使用纯函数的好处

最主要的好处是没有副作用。纯函数不会修改作用域之外的状态,做到这一点,代码就变得足够简单和清晰:当你调用一个纯函数,你只要关注它的返回值,而不用担心因为别处的问题导致错误

函数是健壮的,改变执行次序不会对系统造成影响,因此纯函数的操作可以并行执行。

函数非常容易进行单元测试,因为不需要考虑上下文环境,只需要考虑输入和输出

最后,尽可能使用纯函数让你的代码保持简单和灵活。(解耦)

相关文章

这个问题和curl无法访问https资源是类似的,现在curl可以访问https资源,但是使用pecl安装扩展的时候不行...
在浏览器输入chrome://flags/回车,找到Omnibox UI Hide Steady-State URL Scheme and Trivial Subdoma...
方法一: 我们都知道Ubuntu有一个专门用来安装软件的工具apt,我们可以用它来全自动安装arm-linux-gcc。...
中文的windows下的cmd默认使用GBK的编码,敲代码时,页面使用的是UTF-8(65001),而powershell控制台默认...
提示错误: arm-linux-gcc:Command not found PATH里有/usr/oca/arm/bin,但是make的时候,就是找不到 a...
我在Graph API开发中用的最多的测试工具就是Graph Explore,这个是微软开发的网页版的Graph API的测试工...