闭包封装变量之封装一个阶乘
Posted 一声蔷薇udVkP
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包封装变量之封装一个阶乘相关的知识,希望对你有一定的参考价值。
封装一个阶乘
思路:
- 在闭包中定义一个对象,key为传进来参数转成的字符串(数组的join方法)
- 判断对象中是否有传进来的值,有返回,否则计算,并将阶乘的结果存到这个对象中。
- 返回一个函数。
具体实现过程如下:
// 封装一个阶乘函数
// var mult = function(){
// var a = 1;
// for(let i=0;i<arguments.length;i++){
// a = a*arguments[i]
// }
// return a
// }
// console.log(mult(1,2,3));
// ////////////////////////////////////////
// 优化1,把阶乘过的结果存起来
// var catche = {};
// var mult = function () {
// var a = 1;
// let b = Array.prototype.join.call(arguments, ",");
// if (catche[b]) {
// return catche[b]
// } else {
// for (let i = 0; i < arguments.length; i++) {
// a = a * arguments[i];
// }
// catche[b] = a;
// return a
// }
// }
// console.log(mult(1, 2, 3));
// console.log(mult(1, 2, 3));
// ////////////////////////////////////////
//优化2,将存结果的对象封装在闭包中
var mult = (function () {
var catche = {};
var calculate = function(){
var a = 1;
for (let i = 0; i < arguments.length; i++) {
a = a * arguments[i];
}
return a;
}
return function () {
let args = Array.prototype.join.call(arguments, ",");
if (args in catche) {
return catche[args]
}
return catche[args] = calculate.apply(null,arguments)
}
})();
console.log(mult(1, 2, 3));
console.log(mult(1, 2, 3));
以上是关于闭包封装变量之封装一个阶乘的主要内容,如果未能解决你的问题,请参考以下文章