Кеширующий декоратор
by Artem
JavaScript
'use strict';
function f(x) {
return Math.random() * x; // random для удобства тестирования
}
function makeCaching(f) {
var cache = {};
function wrapper(num) {
if (!(num in cache)) {
cache[num] = f.call(this, num);
}
return cache[num];
}
return wrapper;
}
f = makeCaching(f);
var a, b, c;
a = f(1);
b = f(1);
c = f(1);
alert(a == b); // true (значение закешировано)
alert(a == c);
b = f(2);
alert(a == b); // false, другой аргумент => другое значение