缓存记忆让函数能够记录它之前被调用时所产生的结果。这样,我们第二次获取结果值时,优先从函数的缓存记录中查找结果,避免重复计算结果。
首先要实例一个无闭包的版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Function.prototype.memoized = function() { this._values = this._values || {}; //#1 var key = arguments.length + '_' + Array.prototype.join.call(arguments, '_'); return this._values[key] !== undefined //#2 ? this._values[key] : this._values[key] = this.apply(this, arguments); }; function isPrime(num) { //#3 var prime = num != 1; for (var i = 2; i < num; i++) { if (num % i == 0) { prime = false; break; } } return prime; } console.log('运算结果:', isPrime.memoized(5)); console.log('缓存结果:', isPrime._values['1_5']); |