共计 1078 个字符,预计需要花费 3 分钟才能阅读完成。
纯函数
原文链接: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
正文完