一、是什么
函數(shù)緩存,就是將函數(shù)運算過的結(jié)果進(jìn)行緩存
本質(zhì)上就是用空間(緩存存儲)換時間(計算過程)。
常用于緩存數(shù)據(jù)計算結(jié)果和緩存對象
const add = (a,b)=> a+b;
const calc = memoize(add);// 函數(shù)緩存
calc(1,2)
緩存只是一個臨時的數(shù)據(jù)存儲,它保存數(shù)據(jù),以便將來對該數(shù)據(jù)的請求能夠更快地得到處理
二、如何實現(xiàn)
實現(xiàn)函數(shù)緩存主要依靠閉包、柯里化、高階函數(shù)
閉包
閉包可以理解成,函數(shù) + 函數(shù)體內(nèi)可訪問的變量總和
(function(){
var a = 1;
function add(){
const b = 2;
let sum = b + a
console.log(sum);
}
add()
})()
add函數(shù)本身,以及其內(nèi)部可訪問的變量,即 a = 1,這兩個組合在?起就形成了閉包
柯里化
把接收多個參數(shù)的函數(shù)轉(zhuǎn)換成接收單一參數(shù)的函數(shù)
// 非柯里化
var add = function (x,y){
return x+y;
}
add(3,1)
// 柯里化
var add2 = function (x){
// 返回函數(shù)
return function (y){
return x + y
}
}
add2(3)(1)
高階函數(shù)
通過接收其他函數(shù)作為參數(shù)或返回其他函數(shù)的函數(shù)
function foo(){
var a = 2;
function bar(){
console.log(a);
}
return bar;
}
var baz = foo();
baz();
三、應(yīng)用場景
雖然使用緩存效率是非常高的,但并不是所有場景都適用,因此千萬不要極端的將所有函數(shù)都添加緩存文章來源:http://www.zghlxwxcb.cn/news/detail-525885.html
以下幾種情況下,適合使用緩存文章來源地址http://www.zghlxwxcb.cn/news/detail-525885.html
- 對于昂貴的函數(shù)調(diào)用,執(zhí)行復(fù)雜計算的函數(shù)
- 對于具有有限且高度重復(fù)輸入范圍的函數(shù)
- 對于具有重復(fù)輸入值的遞歸函數(shù)
- 對于純函數(shù),即每次使用特定輸入調(diào)用時返回相同輸出的函數(shù)
到了這里,關(guān)于24-函數(shù)緩存以及應(yīng)用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!