2017-03-16 33 views
0

我被問到這個問題,我不知道我該如何瞄準這個。JavaScript寫一個函數緩存一個函數(記憶)

問:

編寫一個緩存的功能,並返回如果 它在過去已經執行結果的緩存功能。

Let's say if there's a function Fibonacci(20) = 6765 

cacheFunction(Fibonacci(20)) // it should not execute the function instead return 6765. 

But if i give cacheFunction(Fibonacci(21)) //It's not cached, execute the function 

我嘗試:

function cacheFunction(funct) { 

    var obj = {}; 

    if (obj.hasOwnProperty(funct)) { //checking if the argument is in the object? 
     return obj[funct]; 
    } else { //if not present, then execute the function, store it in cache and return the value. 
     obj[funct]; 
     return funct; 
    } 
} 

但我無法理解如何讓參數在一個函數另一個函數裏面? (這個人告訴我,我需要使用關閉來獲得它)

有人能夠啓發我嗎?

+1

BTW:http://stackoverflow.com/search?q=javascript+memoize –

+0

可能重複[Javascript Memoization Explanation?](http://stackoverflow.com/questions/8548802/javascript-memoization-explanation) – m0meni

回答

1

這不是cacheFunction(Fibonacci(20)),這是cacheFunction(Fibonacci)(20)。你確實無法獲得Fibonacci的參數,你不能以某種方式訪問​​它們。 cacheFunction應該做的是構建一個新函數,它提供了與傳入的funct(即在您的情況下爲Fibonacci)相同的功能,方法是環繞它。在最終將被輸入調用的包裝函數(例如20)中,您可以訪問參數並檢查緩存中的值,並可能將它們傳遞到funct

相關問題