js中代码提炼学习-计算参数相乘
程序员文章站
2024-03-21 11:57:40
...
简单函数
var mult = function(){
var a = 1;
for(n in arguments){
a = a*arguments[n]
}
return a
}
优化第一步——利用闭包实现缓存,相同参数重复相乘,不用计算,直接返回,代码如下:
var mult = (function(){
var cacheObj = {};
return function(){
var a = 1;
var key = Array.prototype.join.call(arguments,',');//将参数拼成字符串,作为obj中的key值保存计算结果
if(key in obj){ //判断obj中是否有相同key值,有就直接return
return cacheObj[key]
}
for(n in arguments){
a = a*arguments[n]
}
return cacheObj[key] = a
}
})()
第二步 如果在一个大函数中有一些代码块能够独立出来,应该常常把这些代码块封装在独立的小函数中,独立出来的小函数有助于代码复用,
var mult = (function () {
var cache = {};
var calculate = function () { // 封闭calculate 函数
var a = 1;
for (var i = 0, l = arguments.length; i < l; i++) {
a = a * arguments[i];
}
return a;
};
return function () {
var args = Array.prototype.join.call(arguments, ',');
if (args in cache) {
return cache[args];
}
return cache[args] = calculate.apply(null, arguments); //如果第一个参数为null,则this指向window(在node环境中则指向global)
}
})();
上一篇: postgres之窗口函数
推荐阅读