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

Domknięcie z rekurencją a wyciek pamięci

+1 głos
45 wizyt
pytanie zadane 10 stycznia w JavaScript, jQuery, AJAX przez daniel1806 Obywatel (1,120 p.)

Witam.

Ćwiczę domknięcia w JavaScript i pojawiła mi się pewna wątpliwość. Myślę, że wiem jak to działa ale nie mam pewności czy aby na pewno, więc wolę zapytać.

Chodzi o rekurencję. W zwyczajnej funkcji rekurencyjnej nie ma wycieku pamięci o ile dodamy warunek przerwania rekurencji. Przykład:

function recursion(counter) {
  counter++;
  const a = counter;
  console.log(a);
  if(counter < 100) // Warunek kolejnego wywołania.
    recursion(counter);
}

recursion(0);

W powyższym przykładzie przy kolejnych wywołaniach tworzone są na stosie kolejne zasięgi, w każdym z nich powstaje nowa lokalna zmienna "a" (przykrywając tą z poprzedniego zasięgu), wywoływana jest console.log() i sprawdzany jest warunek. Jak się spełni, to następuje kolejno powrót do poprzedniego zasięgu, a że nie ma więcej instrukcji to cofamy się do poprzedniego itd, aż wychodzimy z funkcji. Przy każdym takim cofnięciu się zmienna "a" (wraz ze wszystkim co byłoby obok niej utworzone) jest usuwana wraz z zasięgiem, dzięki czemu nie mamy wycieku pamięci.

Pytanie brzmi, czy w podobnym przykładzie, tyle, że z domknięciem działa to identycznie?

function myFunction() {
    let a = 0;
    function recursion() {
      a++;
      const b = a
      console.log(b);
      if(a < 100)
        recursion();
    }
    return recursion;
}

const closure = myFunction();
closure();

Rozumiem to tak, że działa tak samo z tą różnicą, że funkcja closure() ma tą swoją "ukrytą" zmienną "a" w swoim kontekście wykonania. Ale przy powrocie w wywołań rekurencyjnych jest ona usuwana wraz z zasięgiem i z utworzoną w każdym wywołaniu lokalną zmienną "b". Jeżeli dobrze myślę, to proszę o potwierdzenie. A jeżeli gdzieś w moim rozumowaniu jest błąd, to byłbym bardzo wdzięczny za wyjaśnienie problemu.

Dziękuję i pozdrawiam.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 53 wizyt
0 głosów
2 odpowiedzi 139 wizyt
pytanie zadane 12 października 2016 w Algorytmy przez j0nasz Nowicjusz (190 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

65,788 zapytań

112,438 odpowiedzi

237,543 komentarzy

46,728 pasjonatów

Przeglądających: 213
Pasjonatów: 10 Gości: 203

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...