- 编写带有记忆功能的函数
//函数memoize()需要传人一个函数作为输入参数,返回相同的函数但增加了储存功能
function memoize(fn){
return function(){
var propertyName;
fn.storage = fn.storage || {};//如果这个函数还没有记忆的对象属性,就添加一个
propertyName = Array.prototype.join.call(arguments, "|");//为了保证属性名唯一性,基于参数组合命名
if(propertyName in fn.storage){ //判断该键是否在记忆对象中
return fn.storage[propertyName];//有就直接取出,避免再次执行函数
}else{
return fn.storage[propertyName] = fn.apply(this, arguments);//不存在,就把函数执行结果保存在记忆对象
}
}
};
//test函数
function getFactorial(num){
var result = 1,
index = 1;
for(; index <= num; index++){
result *= index;
}
return result;
}
var getFactorialMemoized = memoize(getFactorial);
alert(getFactorialMemoized(50));//执行整个函数
alert(getFactorialMemoized(50));//返回保存的值,避免了执行整个函数,增强了性能。
2 . 使用for的小技巧
var myArray = [10,30,24,2,45,67];
for (var index = 0,length = myArray.length; index < length; index++){
//只计算一次的得出myArray.length的值,并保存在一个变量之中,在每一次迭代中,可直接取变量值,无需重新计算
}
提高JavaScript程序性能的方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...