纯函数介绍
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)便于测试,重构和移植。
由于不依赖外部环境,无需配置外部不同状态,测试简便。
由于没有副作用,重构一个纯函数时无需担心影响外部环境。
由于独立性,可以随意移植到别的项目。
以上是关于纯函数介绍的主要内容,如果未能解决你的问题,请参考以下文章
从 url 中提取音频片段并使用纯 Web Audio API 播放
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情