相同的输入永远会得到相同的输出,而且没有任何可观察的副作用
纯函数就类似数学中的函数(用来描述输入和输出之间的关系
)y=f(x)
lodash
是一个纯函数的功能库,提供了对数组、数字、对象、字符串、函数等操作的一些方法可缓存(间接提升性能
)
因为纯函数对相同的输入始终有相同的结果,所以可以把纯函数的结果缓存起来
可测试
纯函数让测试更方便
并行处理
在多线程环境下并行操作共享的内存数据很可能会出现意外情况
纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数
let 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 ]
let 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