懂视1
懂视101
懂视201
懂视301
懂视401
懂视501
懂视601
懂视701
懂视801
懂视901
懂视1001
懂视1101
懂视1201
懂视1301
懂视1401
懂视1501
懂视1601
懂视1701
懂视1801
懂视1901
文库1
文库101
文库201
文库301
文库401
文库501
文库601
文库701
文库801
文库901
文库1001
文库1101
文库1201
文库1301
文库1401
文库1501
文库1601
文库1701
文库1801
文库1901
多米娱乐网
全部频道
首页
科技
教育
生活
旅游
时尚
美容
美食
健康
体育
游戏
汽车
家电
您的当前位置:
首页
JavascriptMemoization缓存函数使用说明_javascript技巧
JavascriptMemoization缓存函数使用说明_javascript技巧
来源:多米娱乐网
举个例子
代码如下:
var flower= function(){
var t=0,i=0;
for(;i<5000000;i++){
t++;
}
return t;
}
flower 返回t的值
假设这个函数需要花费 2-3秒 。
通过 Memoization 函数,再次查找相同的值时,直接获取事先缓存好的 value,立刻返回;
Memoization 函数
代码如下:
var Memoize = function(fn, cache, refetch, obj){
cache = cache || {};//用来缓存结果
return function(){
var k = arguments[1] ? Array.prototype.join.call(arguments, '__') : arguments[0];//多个参数则有'__'分隔开
if (!(k in cache) || (refetch && cache[k] == refetch)) { //如果不在缓存列表中,并且和给定的refetch值相等,重新去运算
cache[k] = fn.apply(obj || fn, arguments); //obj参数可用来改变this指针
}
return cache[k];//返回结果
}
}
Demo:
New Document
(function(){ var Memoize = function(fn, cache, refetch, obj){ cache = cache || {}; return function(){ var k = arguments[1] ? Array.prototype.join.call(arguments, '__') : arguments[0]; if( !(k in cache) && !(refetch && cache[k] == refetch)){ cache[k] = fn.apply(obj || fn, arguments); } return cache[k]; } } var test = function(){ var t=0,i=0; for(;i<12110000;i++){ t++; } return t; } var test2 = Memoize(test) alert(test2()); alert(test2()); })(); script>
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
显示全文