• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze zrozumieniem cache'owania funckcji.

Object Storage Arubacloud
+1 głos
145 wizyt
pytanie zadane 16 czerwca 2017 w JavaScript przez Agr Użytkownik (980 p.)

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 = {}?

1 odpowiedź

0 głosów
odpowiedź 16 czerwca 2017 przez niezalogowany

cachedFunction(2,2) <- w tym momencie wywołujesz tylko funkcję zwróconą przez cache (w której nie ma = {} )

var calls = {}; <- wykonuje się wyłącznie w momencie wywołania funkcji cache

Poczytaj o closures (domknięcia)

1
komentarz 16 czerwca 2017 przez niezalogowany
Swoją drogą całkiem ciekawym ćwiczeniem byłoby przepisanie takiej funkcji na es6+
komentarz 16 czerwca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Podobne pytania

+1 głos
1 odpowiedź 268 wizyt
pytanie zadane 11 kwietnia 2023 w JavaScript przez jasper93 Obywatel (1,310 p.)
0 głosów
0 odpowiedzi 144 wizyt
pytanie zadane 2 maja 2017 w Systemy CMS przez niezalogowany
0 głosów
0 odpowiedzi 154 wizyt

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...