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

Domknięcie w JS

Mały hosting, OGROMNE możliwości
0 głosów
639 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 (86,000 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 (86,000 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 224 wizyt
pytanie zadane 13 września 2016 w Java przez Tadeusz Jasińska Nowicjusz (190 p.)
+1 głos
0 odpowiedzi 242 wizyt
+2 głosów
3 odpowiedzi 435 wizyt
pytanie zadane 4 października 2021 w JavaScript przez StaramSieJakMoge Początkujący (310 p.)

93,696 zapytań

142,614 odpowiedzi

323,225 komentarzy

63,230 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...