JSFiddle - React, Tailwind, and code Playground
by kazabr
JavaScript
/*
function work(a, b) {
console.log(a + b); // work - произвольная функция
}
function makeLogging(f, log) {
return function() {
log.push(arguments);
return f.apply(this, arguments);
}
}
var log = [];
work = makeLogging(work, log);
work(1, 2); // 3, добавлено в log
work(4, 5); // 9, добавлено в log
console.clear();
for(var i=0; i<log.length; i++) {
console.log('Лог: ' + [].join.call(log[i]));
}
*/
function f(x) {
return Math.random()*x; // может быть любой функцией
}
function makeCaching(f) {// Декоратор, кеширующий результат функции
var obj = {};
return function(x) {
if(!obj[x]) {
obj[x] = f.call(this, x);
}
return obj[x];
}
}
f = makeCaching(f);
var a, b;
console.clear();
a = f(1);
b = f(1);
console.log( a == b );
b = f(2);
console.log( a == b );