Skip to content

Instantly share code, notes, and snippets.

@yuchuanxi
Last active March 25, 2016 07:45
Show Gist options
  • Save yuchuanxi/3600ede04ec56f4d1077 to your computer and use it in GitHub Desktop.
Save yuchuanxi/3600ede04ec56f4d1077 to your computer and use it in GitHub Desktop.
memoized result for function
/**
*
* @authors yuChuanXi (http://yuchuanxi.com, wangfei.f2e@gmail.com)
* @date 2016-03-25 15:02:37
* @title title
* @description description
*/
'use strict';
/**
* 缓存函数计算结果,从而提高计算性能,但是会提高内存占用
* @param {Function} fn 需要开启结果缓存的函数
* @return {Function}
*/
memoized = function ( fn ) {
fn._values = fn._values || {};
return function ( key ) {
return fn._values[key] !== undefined ?
fn._values[key] :
fn._values[key] = fn(key);
};
};
/**
* 判断一个数字是否为素数
* @param {Number} num 需要被判断的数字
* @return {Boolean} 是/否
*/
function isPrime ( num ) {
var prime = num !== 1;
for ( var i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
prime = false;
break;
}
}
return prime;
}
function isPrime2 ( num ) {
var
prime = num !== 1;
isPrime2._values || (isPrime2._values = {}); // 用于缓存函数返回结果
if ( isPrime2._values[num] !== undefined ) {
return isPrime2._values[num];
}
for ( var i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
prime = false;
break;
}
}
return isPrime2._values[num] = prime;
}
@yuchuanxi
Copy link
Author

isPrime = memoized(isPrime);
isPrime(2); // true
isPrime(3); // true
isPrime(4); // false
isPrime(6); // false
isPrime(7); // true

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment