//带有记忆能力的函数
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
其实也就是闭包的运用。同时在js中实现了单例。
不懂
@殷敏峰: var instance = memorize(zdgys); //这段代码什么用,效果是什么?,其实就是将zdgys这个函数作为参数传进去,然后做一次缓存,返回自己。下次在传的时候,就直接从缓存中拿。
@幻天芒: 哦, 哦
是缓存了zdgys();这个函数还是缓存了例如:27这个计算值?
@殷敏峰: 只是缓存了这个函数,并没有缓存结果,所以每次都还是调用instance(a,b)来获取结果。
js中闭包 和 数据隐藏的一个应用。
cache 是一个私用局部变量,外面无法访问。
但是使用了闭包把cache这个私用变量是保存了起来,使得它不会超出作用域。
同时在闭包内访问cache字典,达到其它语言常用的一个用私用成员缓存对象、结果的模式。