1.概述
有些場景下,如果一些函數需要大量的運算,但是他們的傳入的參數是一樣的,這個時候,我們可以將這些運算緩存下來,之後的運算就可以不用重複計算了。
2.實現方法
<script>
// 可以緩存的函數
function cacheFunc(fn){
//緩存處理
let cache=new Map();
return function(...args){
//將參數作爲key
let key=JSON.stringify(args);
let result=cache.get(key);
if(result){
console.info("getFromcache");
return result;
}
//真正執行計算
result= fn(...args) ;
//將計算結果加入到緩存
cache.set(key,result);
return result;
}
}
//實際需要執行的函數
function realFunc(row,age){
console.info(row);
console.info(age);
return true;
}
let row={name:"ray"};
let func=cacheFunc(realFunc);
func(row,19);
func(row,19);
func(row,19);
</script>
這裏我們多調用幾次後,我們可以看到,第一次是實際的運算,其他都從緩存中獲取。
這裏用到的知識使用到了閉包。