Função com valores em cache

Aqui está um pequeno trecho de código que demonstra como armazenar valores em cache dentro das próprias funções Javascript. Digamos que você tenha uma função para calcular fatorial usando recursão:

function factorial (n) {
if(n == 1) return 1;
return n * factorial(n-1);
}

Agora, toda vez que você precisa de fatorial de, digamos 9, ele entra em recursão. Para remover esse cálculo duplicado, deixe os valores do cache dentro da própria função. Como sabemos, as funções em Javascript são objetos , então vamos fazer uma propriedade cache da função que armazena os valores calculados nela:

function factorial (n) {
if(arguments.callee.cache[n]) return arguments.callee.cache[n];
if(n == 1) return 1;
var result = arguments.callee.cache[n] = n * factorial(n-1);
return result;
}
factorial
.cache = [];

E você obtém uma função fatorial auto-armazenada em cache!

Mais leia: http://ejohn.org/apps/learn/#19