JavaScript中的纯函数

Posted 波罗丁的菠萝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的纯函数相关的知识,希望对你有一定的参考价值。

先说一下函数返回结果的确定性和不确定性,观察以下两个函数

function sum(a,b){
    return a + b;
}
let res = sum(1,2); // 3

let num = 1;
function sum2(a,b){
    return a + b + num;
}
res = sum2(1,2); // 4 

这两个函数的主要区别在于sum2依赖了一个外部变量num,当这个外部变量发生变化之后,sum2函数参数不变时,返回结果也会发生变化,那么sum2函数存在不确定性。

再观察下面这个函数

function sum3(a,b){
    return a + b + Math.random();
} 

因为Math.random返回的结果是个随机数,那么sum3函数返回的结果也是不确定的,即sum3函数也存在不确定性。

然后说一下函数的副作用,观察以下两个函数

function sum(a,b){
    return a + b;
}
let res = sum(1,2); // 3

let num = 1;
function sum2(a,b){
    num = 2;
    return a + b;
}
let res2 = sum2(num,2); // 5
console.log(num); // 2 

可以看到sum2函数导致了外部的变量发生了变化,这个就是副作用,副作用并不是毒药,某些时候往往是必须的。

通过以上的几行简单的代码我们可以了解到,有些函数的输出结果只依赖于输入的参数,并且没有副作用,这种函数我们称之为纯函数。

纯函数有利于测试和重构

使用纯函数的一个主要好处是它们可以直接测试。 如果传入相同的参数,它们将始终产生相同的结果。

同时纯函数还使得维护和重构代码变得更加容易。你可以放心地重构一个纯函数,不必担心没注意到的副作用搞乱了整个应用而导致终调试地狱。

正确地使用纯函数可以产生更加高质量的代码。并且也是一种更加干净的编码方式。

以上是关于JavaScript中的纯函数的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 片段函数实现不会在 TextView 中将文本格式化为 HTML

函数式编程中的纯函数

Node.js JavaScript 片段中的跳过代码

常用Javascript代码片段集锦

如何将socket_read值获取为从PHP websocket中的javascript发送的纯文本

如何将此 JavaScript 代码片段翻译成 Parenscript?