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

Domknięcie w JS

Object Storage Arubacloud
0 głosów
333 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,260 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,260 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 172 wizyt
pytanie zadane 13 września 2016 w Java przez Tadeusz Jasińska Nowicjusz (190 p.)
+1 głos
0 odpowiedzi 164 wizyt
+2 głosów
3 odpowiedzi 180 wizyt
pytanie zadane 4 października 2021 w JavaScript przez StaramSieJakMoge Początkujący (310 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...