Como o sublinhado memoize é implementado em javascript
Estou desenvolvendo minha própria biblioteca de programação funcional e agora consultando ounderscore
.
memorizar _.memoize (função, [hashFunction])
Memoriza uma determinada função armazenando em cache o resultado calculado. Útil para acelerar cálculos de execução lenta. Se aprovada uma hashFunction opcional, ela será usada para calcular a chave de hash para armazenar o resultado, com base nos argumentos da função original. O hashFunction padrão apenas usa o primeiro argumento para a função memorizada como a chave.
var fibonacci = _.memoize(function(n) {
return n < 2 ? n: fibonacci(n - 1) + fibonacci(n - 2);
});
O código acima que permite a memorização automática sem lidararray
parece meio mágico, e eu vi o código-fonte abaixo, mas ainda assim o design interno não está claro para mim.
// 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;
};
Alguém pode me dar uma breve idéia do que está acontecendo?
Estimado.