• 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
39 wizyt
pytanie zadane 10 stycznia w JavaScript, jQuery, AJAX przez daniel1806 Użytkownik (580 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
2 odpowiedzi 137 wizyt
pytanie zadane 12 października 2016 w Algorytmy przez j0nasz Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 172 wizyt
pytanie zadane 1 maja 2015 w C i C++ przez falauthy Stary wyjadacz (11,620 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

62,468 zapytań

108,621 odpowiedzi

226,795 komentarzy

36,303 pasjonatów

Przeglądających: 63
Pasjonatów: 0 Gości: 63

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.

...