// 实现带缓存功能的乘法功能
function fn(){
// 实现乘法功能
var calculate = function(){
console.log('------------');
// 这里的arguments表示该函数被调用时传递过来的实参列表
var result = 1;
for (var i = 0; i < arguments.length; i++) {
result *= arguments[i];
}
return result;
}
var cache = {};
return function(){
// 把arguments类数组转成数组
var param = [].slice.call(arguments,0);
console.dir(arguments);
// 对数组排序
param.sort(function(a,b){
return a - b;
});
// 生成缓存标记,为了区分不同的参数数据
var cacheFlag = 'key' + param.join('-');
// var cacheFlag = 'key' + [].join.call(arguments,'-');
// 判断缓存中是否存在缓存标记
if(cacheFlag in cache){
// 有缓存,直接返回,不再计算
return cache[cacheFlag];
}else{
// 没有缓存,先计算,再存储到缓存,然后反馈
var ret = calculate.apply(null,arguments);
cache[cacheFlag] = ret;
return cache[cacheFlag];
}
// 使用apply调用calculate的作用就是把参数拆解成单个的数据
}
}
var foo = fn();
foo(1,3,2);
var ret = foo(1,2,3);
console.log(ret);