var fn9 = (function () {
var arr = {}; //缓存对象
var counter = function (arr) { //计算函数//args也就是fn9(1, 2, 3, 4, 5);的 参数
var sum = 0;
//求和
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
console.log("counter",sum);
return sum;//生成属性名
}
return function () {
//其实本质就是arguments这个对象使用了数组的slice这个方法,得到了参数构成的数组
var args = Array.prototype.slice.call(arguments,0); //arguments转换成数组
// console.log(args,"ar");
var key = args.join(","); //将args用逗号连接成字符串//1,2,3,4,5
console.log(key);
var result, tSum = arr[key];//对象名1,2,3,4,5: 得到对象名
// console.log(arr[key]);
// console.log(tSum);
if (tSum) { //如果缓存中已存在
console.log('从缓存中取:', arr) //打印方便查看
result = tSum;
} else {
//重新计算,并存入缓存同时赋值给result
result = arr[key] = counter(args);// result的值来自counter
console.log('存入缓存:', arr) //打印方便查看
}
return result;
}
})();
console.log(fn9(1, 2, 3, 4, 5)); //return 15
// fn9(1, 2, 3, 4, 5);
// console.log( fn9(1, 2, 3, 4, 5, 6));// 21
// fn9(1, 2, 3, 4, 5, 8);
// fn9(1, 2, 3, 4, 5, 6);
Array.prototype.slice.call(arguments,0); 上下调用模型
最新推荐文章于 2024-08-23 17:23:33 发布