2017-03-16 10 views
0

Ich wurde diese Frage gestellt und ich war mir nicht sicher, wie ich dies anvisieren kann.JavaScript eine Funktion schreiben, die eine Funktion zwischenspeichert (Memo)

Frage:

eine Cache-Funktion schreiben, die eine Funktion speichert und liefert ein Ergebnis, wenn es bereits in der Vergangenheit ausgeführt wurde.

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 

Mein Versuch:

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; 
    } 
} 

Aber ich nicht in der Lage bin zu verstehen, wie die Argumente innerhalb einer anderen Funktion in einer Funktion zu bekommen? (Die Person hat mir gesagt, dass ich den Verschluss benutzen muss, um es zu bekommen)

Kann mir jemand aufklären?

+1

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

+0

Mögliche Duplikate von [Javascript Memoization Erläuterung?] (Http://stackoverflow.com/questions/8548802/javascript-memization-explanation) – m0meni

Antwort

1

Es ist nicht cacheFunction(Fibonacci(20)), dann ist es cacheFunction(Fibonacci)(20). Sie können die Parameter von Fibonacci in der Tat nicht abrufen, Sie können diese Funktion nicht ändern, um irgendwie auf sie zuzugreifen. Was cacheFunction tun soll, ist eine neue Funktion zu konstruieren, die die gleiche Funktionalität wie die übergebene funct (d. H. Fibonacci in Ihrem Fall) bietet, indem Sie sich darum wickeln. In der Wrapper-Funktion, die schließlich mit der Eingabe aufgerufen wird (z. B. 20), können Sie auf die Argumente zugreifen und den Cache auf ihre Werte überprüfen und sie möglicherweise an funct weiterleiten.

Verwandte Themen