//définition du cache var cache = function(f){ var cache = {} return function(){ var key = Array.prototype.join.call(arguments, ','); console.debug(key, cache); if(key in cache){ return cache[key]; }else{ return cache[key] = f.apply(this, arguments); } } } //définition d'une fonction test function square(x){ document.write('square('+x+') est appelé'); return x*x; } //définition de la fonction avec cache var cachedSquare = cache(square); //appel de la fonction sans cache square(1); //affiche square(1) est appelé square(1); //affiche square(1) est appelé => la fonction n'est pas mise en cache //appel de la fonction avec cache cachedSquare(2); //affiche square(2) est appelé cachedSquare(2); //n'affiche rien => la fonction est bien mise en cache. cachedSquare(3); //affiche square(3) est appelé document.write(cachedSquare(2)); //affiche 4 => c'est bien la bonne valeur qui est retournée. //seconde fonction avec cache var cachedSquare2 = cache(square); cachedSquare2(2); //affiche square(2) est appelé => la mémoire n'est pas partagée entre les fonctions mises en cache, alors qu'il s'agit de la même fonction d'origine.