JavaScript:memoize全局函數(shù)

基本概念

  • 簡單講就是把函數(shù)的計算結果緩存起來。這個對于計算量大的遞歸調用,可以加快速度。比如階乘,斐波那契數(shù)組數(shù)組等。

  • 第1次計算,還是耗時的,因為沒有緩存;從第2次開始,可以不經過計算,直接從緩存中拿結果,速度很快。

  • 對于遞歸函數(shù),緩存的是最終結果,而不是中間過程。比如計算10的階乘,最終緩存的是10的階乘的結果。中間過程1 ~ 9的階乘結果不緩存。也就是調用10的階乘之后再調用9的階乘,還是算第一次計算。

實現(xiàn)代碼

文件名:memoize.js

const memoize = function(fn) {
    const cache = {};
    return function() {
        const key = JSON.stringify(arguments);
        var value = cache[key];
        if(!value) {
            console.log('新值,執(zhí)行中...');         // 為了了解過程加入的log,正式場合應該去掉
            value = [fn.apply(this, arguments)];  // 放在一個數(shù)組中,方便應對undefined,null等異常情況
            cache[key] = value;
        } else {
            console.log('來自緩存');               // 為了了解過程加入的log,正式場合應該去掉
        }
        return value[0];
    }
}

module.exports = memoize;

測試代碼

文件名: memoize_test.js

const memoize = require('./memoize.js');
const log = console.log;

// 斐波那契數(shù)組
const fibonacci = (n) => {
    return n < 2 
        ? n
        : fibonacci(n - 1) + fibonacci(n - 2);
};

const memoizeFibonacci = memoize(fibonacci);

log(memoizeFibonacci(45));   // 新值,執(zhí)行中...;    1134903170  // 等待時間比較長
log(memoizeFibonacci(45));   // 來自緩存;    1134903170
log(memoizeFibonacci(45));   // 來自緩存;    1134903170
log(memoizeFibonacci(45));   // 來自緩存;    1134903170
log(memoizeFibonacci(45));   // 來自緩存;    1134903170

參考文章

js Memoization 優(yōu)化運行速度

Javascript Memoizer淺析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大獎:點擊這里領取 在...
    HetfieldJoe閱讀 1,886評論 0 14
  • 函數(shù)參數(shù)的默認值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認值,只能采用變通的方法。 上面代碼檢查函數(shù)l...
    呼呼哥閱讀 3,708評論 0 1
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,683評論 0 4
  • 持續(xù)待業(yè)的生活碰上高溫天氣,真是極其無聊。找工作的不易讓我日漸困惑與迷茫,我發(fā)覺自己難以打起精神,也沒有很想做的事...
    煙月不改閱讀 383評論 0 0

友情鏈接更多精彩內容