- 编写带有记忆功能的函数
//函数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的值,并保存在一个变量之中,在每一次迭代中,可直接取变量值,无需重新计算
}
网友评论