首页 新闻 会员 周边

Javascript代码的小小疑问(30)

0
[已解决问题] 解决于 2015-06-25 17:05

//带有记忆能力的函数

function memorize(f) {

  var cache = {};

  return function() {

    var key = arguments.length + Array.prototype.join.call(arguments,",");

       if(key in cache) return cache[key];

      else return cache[key] = f.apply(this,arguments);

  };

 };

 

 

//最大公约数算法函数

 function zdgys(a,b) {

  var t; if(a < b){

           t = b,b = a, a = t;

   };

while(b != 0){

           t = b,b = a%b, a = t;

    };

  return a;

};

var instance = memorize(zdgys);  //这段代码什么用,效果是什么?

alert(instance(27,54));  //27

 

Coca-code的主页 Coca-code | 初学一级 | 园豆:10
提问于:2015-06-25 10:28
< >
分享
最佳答案
0

其实也就是闭包的运用。同时在js中实现了单例。

奖励园豆:5
幻天芒 | 高人七级 |园豆:37175 | 2015-06-25 10:30

不懂

Coca-code | 园豆:10 (初学一级) | 2015-06-25 10:35

@殷敏峰: var instance = memorize(zdgys);  //这段代码什么用,效果是什么?,其实就是将zdgys这个函数作为参数传进去,然后做一次缓存,返回自己。下次在传的时候,就直接从缓存中拿。

幻天芒 | 园豆:37175 (高人七级) | 2015-06-25 10:44

@幻天芒: 哦, 哦

是缓存了zdgys();这个函数还是缓存了例如:27这个计算值?

Coca-code | 园豆:10 (初学一级) | 2015-06-25 10:50

@殷敏峰: 只是缓存了这个函数,并没有缓存结果,所以每次都还是调用instance(a,b)来获取结果。

幻天芒 | 园豆:37175 (高人七级) | 2015-06-25 14:10
其他回答(1)
0

js中闭包 和 数据隐藏的一个应用。

cache 是一个私用局部变量,外面无法访问。

但是使用了闭包把cache这个私用变量是保存了起来,使得它不会超出作用域。

同时在闭包内访问cache字典,达到其它语言常用的一个用私用成员缓存对象、结果的模式。

傲慢与偏剑 | 园豆:381 (菜鸟二级) | 2015-06-25 12:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册