//Dekorator: funkcja modyfikująca inną funkcję
//Przykład: cache, by działała szybciej
function cached(arr, fn) {
var tab = arr;
//funkcja zwraca funkcję, a nie wynik
return function(x) {
//funkcja w funkcji zwraca wynik - albo z cache albo wyliczony
if(!!tab[x]) {
return tab[x];
} else {
tab[x] = fn(x);
return tab[x];
}}}
//z to teraz funkcja, mnożąca przez 100, ale wykorzystująca cache
var z = cached([10, 20, 30], function(x){ return x * 100; });