Witam, mam problem ze zrozumieniem tego kodu poniżej.
function multiply(a,b){
return a * b;
}
function cache(func) {
var calls = {};
return function() {
var key = JSON.stringify(arguments);
if (!(key in calls)) {
calls[key] = func.apply(null, arguments);
}
return calls[key];
};
}
var cachedFunction = cache(multiply);
Ogólnie rzecz biorąc wiem że funkcja cache przyjmuje jako pierwszy argument funkcje, a następnie argumenty z jakimi ta funkcja ma być wywołana. Jeśli przekazana funkcja była już wywołana z tymi argumentami to nie wywołuje jej ponowni tylko zwraca zapisany wynik z obiektu calls. I to rzeczywiście działa, jesli uruchomimy taki kod
cachedFunction(2,2);
cachedFunction(2,2);
to drugi wynik już będzie pobrany z obiektu calls. I tu moje pytanie, jakim cudem obiekt calls ma w sobie dane z poprzednich wywołań , szczególnie że pierwsza linijka w ciele funckji to var calls = {}?