纯函数介绍

网友投稿 227 2022-09-27

纯函数介绍

纯函数是一种函数。这种函数不依赖外部环境的状态,若输入的参数相同,返回的结果也永远相同,并且执行过程中无任副作用。副作用就是执行中与函数外部环 境发生的交互,如发起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) //4add_new(3) //4 (第二次从缓存中读取)

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Reflex WMS入门系列三十六:已知一个HD号码如何查询到它是通过哪个receipt收货产生的?
下一篇:Java 多线程并发ReentrantLock
相关文章

 发表评论

暂时没有评论,来抢沙发吧~