纯函数介绍

Posted 前端纸飞机

tags:

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

纯函数是一种函数。这种函数不依赖外部环境的状态,若输入的参数相同,返回的结果也永远相同,并且执行过程中无任副作用。副作用就是执行中与函数外部环 境发生的交互,如发起HTTP请求,操作 DOM,修改外部数据,打印log等。

例子

非纯函数:

//(1) add依赖了外部变量a。如果a变化,返回也 会变化,add(2)并不永远输出3。
let a = 1;

function add(b) {
  return a + b;
}

console.log(add(2)); // 3 

//(2)执行过程中修改了外部数据a,产生了副作 用。

let a = 1;

function change() {
  a = 'b';
}

console.log(a);//b

纯函数:

//输入2永远返回3,也没有与外部环境产生副作用。

function add(b) { 
    let a = 1; 
    return a + b;
}

console.log(add(2)); // 3

实际应用中:

很多数组函数如map,forEach都是纯函数。 redux中的reducer也是纯函数,接收先前的state和action,并返回新的state。

纯函数的好处:

(1)可缓存(利用memorize技术),节省计算资源。

//纯函数
function add(b) {
    let a = 1;
    return a + b;
}
// memorize,传入的fn为纯函数 
const memoize = (fn)=>{
    const cache = {};
    return () =>{ 
        var arg = JSON.stringify(arguments);
        //若参数首次传入则执行纯函数,将参数和结 果保存至缓存cache。
        //若参数之前使用过就直接返回缓存中的结 果。
        cache[arg] = cache[arg] || fn.apply(fn, arguments); 
        console.log(cache[arg])
        return cache[arg];
    }
}

let add_new = memoize(add); 
add_new(3) //4
add_new(3) //4 (第二次从缓存中读取)

(2)便于测试,重构和移植。

由于不依赖外部环境,无需配置外部不同状态,测试简便。

由于没有副作用,重构一个纯函数时无需担心影响外部环境。

由于独立性,可以随意移植到别的项目。

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

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

纯函数介绍

纯函数介绍

从 url 中提取音频片段并使用纯 Web Audio API 播放

函数式编程:纯函数&柯里化&组合函数

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情