Wie Unterstreichungs-Memoize in Javascript implementiert ist

Ich entwickle meine eigene funktionale Programmierbibliothek und beziehe mich jetzt auf dieunderscore.

auswendig lernen _.memoize (Funktion, [hashFunction])

Speichert eine gegebene Funktion, indem das berechnete Ergebnis zwischengespeichert wird. Nützlich, um langsam laufende Berechnungen zu beschleunigen. Wenn eine optionale hashFunction übergeben wird, wird sie verwendet, um den Hash-Schlüssel zum Speichern des Ergebnisses basierend auf den Argumenten der ursprünglichen Funktion zu berechnen. Die standardmäßige hashFunction verwendet nur das erste Argument für die gespeicherte Funktion als Schlüssel.

var fibonacci = _.memoize(function(n) {
  return n < 2 ? n: fibonacci(n - 1) + fibonacci(n - 2);
});

Der obige Code, der das automatische Speichern ermöglicht, ohne zu handelnarray sieht irgendwie magisch aus, und ich habe den Quellcode unten gesehen, aber das innere Design ist mir immer noch nicht klar.

 // Memoize an expensive function by storing its results.
  _.memoize = function(func, hasher) {
    var memoize = function(key) {
      var cache = memoize.cache;
      var address = hasher ? hasher.apply(this, arguments) : key;
      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
      return cache[key];
    };
    memoize.cache = {};
    return memoize;
  };

Kann mir jemand eine kurze Vorstellung davon geben, was los ist?

Geschätzt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage