纯函数是什么?

Posted DongL

tags:

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

纯函数就是一个函数,只不过具有一些特点,你可能平时开发中都有用到,只是没有意识到这是一个纯函数。

纯函数(Prue function)具有以下特点:
  1. 纯函数每一次调用时传入同样的参数,返回的都是同样的结果;它不会改变参数的值,也不会改变外部变量的值;它不会依赖于外部的变量,仅依赖于你传入的参数;
  2. 纯函数没有其他副作用(side effect)
  3. 如果你每次传入的参数一样,但是返回的结果不一样,则不是一个纯函数

Just show me the code:

这是一个纯函数:

/* 

    它接受两个参数:一个数组和一个要添加的项
    然后根据这两个参数,返回一个新的数组
    它没有改变原来参数的值
    每次调用时传递相同的值,返回的结果永远一样
    它没有修改外部的变量和数据
    
*/
let array = [1, 2, 3];

function addItemToArray(array, item) {
    return [...array, item];
}

addItemToArray(array, 4);

这不是一个纯函数

/*
    这个函数 return 的值是一个数组
    这个数组是在原来的数组 array 的基础上,追加了一项
    它改变了外部变量
    每次执行函数时传入同样的值,返回的结果不相同
    所以它不是纯函数
*/
let array = [1, 2, 3];

function addItemToArray(array, item) {
    return array.push(item);
}

addItemToArray(array, 4);

这是一个纯函数:

/*
    它没有改变外部变量的值
    每次调用时如果传递的值相同,那每次返回的结果也相同
*/
let a = 1;
let b = 2;
function add(x, y) {
    return x + y;
}
add(a, b);

这不是一个纯函数:

/*
    它改变了外部变量的值
    每次返回的结果都不一样。
*/
let a = 1;
function add(x, y) {
   return x += y;
}
add(a, 2);
纯函数的优点:

纯函数使代码更可靠,可利于测试与维护,在开发中应该尽可能多地使用纯函数。

哪些情况不适用纯函数:
  • 网络请求:根据网络请求返回不同的数据
  • 其他需要改变外部变量的函数

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

[译] 如何在React中写出更优秀的代码

纯数字是啥意思

在 Visual Studio 中创建构造函数的代码片段或快捷方式

纯函数是什么?

什么是纯函数

纯函数是什么?怎么合理运用纯函数?