纯函数
原文链接:https://note.noxussj.top/?source=sifo
什么是纯函数?
雷同的输出永远会失去雷同的输入,而且没有任何可察看的副作用。纯函数就相似数学中的函数(用来形容输出和输入之间的关系)y=fn(x)
纯函数库
咱们平时用的 lodash 其实就是纯函数库。
纯函数的长处
可缓存(间接晋升性能)
也就是咱们平时说的函数缓存,因为纯函数对雷同的输出始终有雷同的后果,所以能够把纯函数的后果缓存起来,就没必要每次调用该函数都要从新执行一遍函数体的代码
可测试
纯函数让测试更不便,不受副作用的影响
并行处理
在多线程环境下并行操作共享的内存数据很可能会出现意外状况(纯函数内的数据都是独立的),纯函数不须要访问共享的内存数据,所以在并行环境下能够任意运行纯函数
根底案例
纯函数
雷同的输出始终失去雷同的输入
const array = [1, 2, 3, 4, 5] console.log(array.slice(0, 3)) console.log(array.slice(0, 3)) console.log(array.slice(0, 3)) // [ 1, 2, 3 ] // [ 1, 2, 3 ] // [ 1, 2, 3 ]
不纯的函数
雷同的输出失去的输入却不雷同
const array = [1, 2, 3, 4, 5] console.log(array.splice(0, 3)) console.log(array.splice(0, 3)) console.log(array.splice(0, 3)) // [ 1, 2, 3 ] // [ 4, 5 ] // []
函数缓存
每次调用函数,并且传入参数雷同时,函数体内代码不会被执行,间接返回上一次输入的后果
const lodash = require('lodash') function getArea(r) { console.log(r) return Math.PI * r * r } let getAreaWithMemory = lodash.memoize(getArea) // 创立一个缓存函数 console.log(getAreaWithMemory(4)) console.log(getAreaWithMemory(4)) console.log(getAreaWithMemory(4)) console.log(getAreaWithMemory(5)) // 4 // 50.26548245743669 // 50.26548245743669 // 50.26548245743669 // 5 // 78.53981633974483
原文链接:https://note.noxussj.top/?source=sifo