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 );