抄自掘金文章《JavaScript的记忆函数真的可以提升性能吗?》
原理:利用函数闭包在函数内部保留之前的计算结果,以达到减少计算的目的。
-
带记忆函数:
let isPrime = (function () { let hash = { //哈希中存储类似这样的结构 //8: false, //7: true } let isPrime = (n) => { // 返回内层函数 if (n < 3) { return true } else if (hash[n] !== undefined) { return hash[n] } else { for (leti = 2; i < Math.sqrt(n); i++) { if (n % i == 0) { return hash[n] = false; } } return hash[n] = true } } return isPrime })() //这个函数使用闭包 和 一个对象(实现记忆)
-
普通函数:
let isPrime1 = (n) => { if (n < 3) { return true; } else { for (leti = 2; i < Math.sqrt(n); i++) { if (n % i == 0) { return false; } } return true; } }
-
测试
let array = [] for (leti = 0; i < 1000000; i++) { array.push(parseInt(Math.random() *1100 )) } console.time('isPrime') for (let i = 0; i < array.length;i++) { isPrime(array[i]) } console.timeEnd('isPrime')
-
结果
Onnode v8.2.0
isPrime: 13.068ms // With Memory isPrime: 42.026ms // Without Memory