2017-05-08 36 views
-1

如何緩存JavaScript中任何函數的執行?JavaScript中的緩存功能

如果我在緩存函數中傳遞多個參數該怎麼辦?

+2

你是什麼意思_cache_? –

+2

**請勿將您的文本以粗體顯示**請*確認*明確說明您要完成的目標:[*我如何提出一個好問題?*](/ help/how -to-ask) –

+2

將函數的結果存儲在變量中,就像在任何語言中一樣?你想要做什麼,哪些不起作用? – David

回答

0

你可以有一個方法,你將傳遞一個函數,它將在內部維護一個緩存對象,其中計算值將被緩存。當你用相同的參數調用該函數時,緩存的值將被提供。

function cacheFn(fn) { 
    var cache={}; 

    return function(arg){ 
     if (cache[arg]){ 
      return cache[arg]; 
     } 
     else{ 
      cache[arg] = fn(arg); 
      return cache[arg]; 
     } 
    } 
} 

如果傳遞多個參數,首先我們必須使用參數得到傳遞給函數的所有參數,然後我們可以生成緩存對象的關鍵。爲緩存對象生成密鑰可能會非常棘手,一種解決方案可能只是獲取所有參數並將它們連接起來。看看下面的代碼。

return function(){ 
    var args = arguments; 
    var key = [].slice.call(args).join(''); 
    if(cache[key]){ 
     return cache[key]; 
    } 
    else{ 
     cache[key] = fn.apply(thi, args); 
     return cache[key]; 
    } 
} 
+0

當然,這個假設可以將參數強制轉換爲字符串。 –