Javascript Memoization 緩存函數(shù)使用說明
更新時間:2010年05月31日 19:54:34 作者:
Memoization 是一種將函數(shù)返回值緩存起來的方法,學(xué)習(xí)js 面向?qū)ο蟮呐笥芽梢詤⒖枷隆?
舉個例子
var flower= function(){
var t=0,i=0;
for(;i<5000000;i++){
t++;
}
return t;
}
flower 返回t的值
假設(shè)這個函數(shù)需要花費 2-3秒 。
通過 Memoization 函數(shù),再次查找相同的值時,直接獲取事先緩存好的 value,立刻返回;
Memoization 函數(shù)
var Memoize = function(fn, cache, refetch, obj){
cache = cache || {};//用來緩存結(jié)果
return function(){
var k = arguments[1] ? Array.prototype.join.call(arguments, '__') : arguments[0];//多個參數(shù)則有'__'分隔開
if (!(k in cache) || (refetch && cache[k] == refetch)) { //如果不在緩存列表中,并且和給定的refetch值相等,重新去運算
cache[k] = fn.apply(obj || fn, arguments); //obj參數(shù)可用來改變this指針
}
return cache[k];//返回結(jié)果
}
}
Demo:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
復(fù)制代碼 代碼如下:
var flower= function(){
var t=0,i=0;
for(;i<5000000;i++){
t++;
}
return t;
}
flower 返回t的值
假設(shè)這個函數(shù)需要花費 2-3秒 。
通過 Memoization 函數(shù),再次查找相同的值時,直接獲取事先緩存好的 value,立刻返回;
Memoization 函數(shù)
復(fù)制代碼 代碼如下:
var Memoize = function(fn, cache, refetch, obj){
cache = cache || {};//用來緩存結(jié)果
return function(){
var k = arguments[1] ? Array.prototype.join.call(arguments, '__') : arguments[0];//多個參數(shù)則有'__'分隔開
if (!(k in cache) || (refetch && cache[k] == refetch)) { //如果不在緩存列表中,并且和給定的refetch值相等,重新去運算
cache[k] = fn.apply(obj || fn, arguments); //obj參數(shù)可用來改變this指針
}
return cache[k];//返回結(jié)果
}
}
Demo:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
相關(guān)文章
原生js實現(xiàn)針對Dom節(jié)點的CRUD操作示例
這篇文章主要介紹了原生js實現(xiàn)針對Dom節(jié)點的CRUD操作,結(jié)合實例形式分析了javascript操作dom節(jié)點的創(chuàng)建、獲取、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08js實現(xiàn)動態(tài)改變radio狀態(tài)的方法
下面小編就為大家分享一篇js實現(xiàn)動態(tài)改變radio狀態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02深入理解JavaScript系列(3) 全面解析Module模式
Module模式是JavaScript編程中一個非常通用的模式,一般情況下,大家都知道基本用法,本文嘗試著給大家更多該模式的高級使用方式2012-01-01JavaScript中創(chuàng)建字典對象(dictionary)實例
這篇文章主要介紹了JavaScript中創(chuàng)建字典對象(dictionary)實例,本文直接給出了實現(xiàn)的源碼,并給出了使用示例,需要的朋友可以參考下2015-03-03基于JavaScript實現(xiàn)動態(tài)添加刪除表格的行
又一個動態(tài)控制表格的效果,用JavaScript動態(tài)生成表格行、表格列,以及還可動態(tài)刪除這些行列,行等,運行代碼后,點擊對應(yīng)的功能按鈕,即可實現(xiàn)對應(yīng)的表格操作功能,接下來通過代碼實例給大家介紹JavaScript實現(xiàn)動態(tài)添加刪除表格的行,需要的朋友參考下2016-02-02JS中使用apply方法通過不同數(shù)量的參數(shù)調(diào)用函數(shù)的方法
這篇文章主要介紹了JS中使用apply方法通過不同數(shù)量的參數(shù)調(diào)用函數(shù)的方法的相關(guān)資料,需要的朋友可以參考下2016-05-05Javascript 修改String 對象 增加去除空格功能(示例代碼)
這篇文章主要介紹了Javascript 修改String 對象 增加去除空格功能(示例代碼)。需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11