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

Domknięcie w JS

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
551 wizyt
pytanie zadane 9 marca 2017 w JavaScript przez mowmiheniek Stary wyjadacz (11,900 p.)

Witam,

Czytam książkę "Programowanie w JavaScript" i jest użyty kod w celu zaprezentowania domknięcia, którego częściowo nie rozumiem. 

Function makeCounter () {
  var count = 0;
  function counter() {
    count = count + 1;
    return count;
    }
return counter;
}

var doCount = makeCounter ();
console.log(doCount());
console.log(doCount());
console.log(doCount());

Moje pytanie: dlaczego makeCounter() przypisali do zmiennej? Mogli przecież funkcje wywołać tak:

console.log(makeCounter());

1 odpowiedź

+2 głosów
odpowiedź 9 marca 2017 przez rafal.budzis Szeryf (85,700 p.)
wybrane 9 marca 2017 przez mowmiheniek
 
Najlepsza

Wywołanie funkcji makeCounter zwraca wewneczną funkcje counter poprzez (return counter;) i do zmiennej doCount jest przypisywana funkcja counter. 

 

Poprawnym zamiennikiem było by 

console.log((makeCounter())());

 

komentarz 9 marca 2017 przez mowmiheniek Stary wyjadacz (11,900 p.)
Dzięki, teraz jest jasne.
komentarz 9 marca 2017 przez mowmiheniek Stary wyjadacz (11,900 p.)

Sprawdziłem ten zamiennik i to nie jest prawda. 

console.log((makeCounter())());

Wyświetla działanie funkcji counter, ale nie przechowuje jej środowiska. Użycie kilkakrotnie takiego wywołania  da nam wynik 1, 1, 1, 1.

W przypadku:

console.log(doCount());

dostajemy wynik 1, 2, 3, 4.

komentarz 9 marca 2017 przez mowmiheniek Stary wyjadacz (11,900 p.)
Jednak naprowadziłeś mnie na zrozumienie tego więc + i najlepsza zostają ;)
komentarz 9 marca 2017 przez rafal.budzis Szeryf (85,700 p.)
Skupiłem się głownie na wytłumaczeniu co przypisujemy do zmiennej doCount bo takie tez było twoje pytanie ;) Ciesze się ze mogłem pomóc.
1
komentarz 9 marca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Użycie kilkakrotnie takiego wywołania  da nam wynik 1, 1, 1, 1.

Środowisko jest przechowywane, bo inaczej zamiast wartości zmiennej count otrzymałbyś undefined. Po prostu, każdorazowe wywołanie funkcji  makeCounter() powoduje tworzenie (ze świeżą inicjalizacją) zmiennej count o wartości 0. Dlatego najpierw zwrócony wynik z funkcji przypisujesz do zmiennej, aby inicjalizacja była przeprowadzona raz, potem wywołujesz funkcję doCount(), aby inkrementować zmienną.

Podobne pytania

+1 głos
0 odpowiedzi 192 wizyt
pytanie zadane 13 września 2016 w Java przez Tadeusz Jasińska Nowicjusz (190 p.)
+1 głos
0 odpowiedzi 206 wizyt
+2 głosów
3 odpowiedzi 328 wizyt
pytanie zadane 4 października 2021 w JavaScript przez StaramSieJakMoge Początkujący (310 p.)

93,439 zapytań

142,431 odpowiedzi

322,677 komentarzy

62,802 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

...