8. 纯函数的好处
leezozz 1/8/2023 js
# 纯函数的好处:
- 可缓存
因为纯函数对相同的输入总是有相同的输出,所以可以把纯函数的结果缓存起来
- 可缓存
const _ = require('lodash')
// 计算圆的面积
function getArea(r) {
console.log('半径', r)
return Math.PI * r * r
}
// // 记忆函数
// memoize接受一个纯函数作为参数,返回一个带有记忆功能的函数
// let getAreaMemory = _.memoize(getArea)
// console.log(getAreaMemory(2))
// console.log(getAreaMemory(2))
// console.log(getAreaMemory(2))
// 手动模拟一个memoize函数(记忆函数)
function memoize(f) {
let cache = {}
return function() {
let arg_str = JSON.stringify(arguments)
// 初次调用会执行f.apply(f, arguments)函数,非初次调用会使用之前存储的value:cache[arg_str]
cache[arg_str] = cache[arg_str] || f.apply(f, arguments)
return cache[arg_str]
}
}
let getAreaMemory = memoize(getArea)
console.log(getAreaMemory(2))
console.log(getAreaMemory(2))
console.log(getAreaMemory(2))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- 可测试
纯函数让测试更方便
- 可测试
- 并行处理
在多线程环境下并行操作共享的内存数据很可能会出现意外情况 纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数
- 并行处理