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

Funkcja anonimowa

Object Storage Arubacloud
0 głosów
232 wizyt
pytanie zadane 11 listopada 2022 w JavaScript przez xTMx3 Obywatel (1,560 p.)

Witam,

dostałem zadanie, aby napisać funkcję przyjmującą trzy argumenty, z których pierwszy jest funkcją anonimową, która zostanie wykonana, a na jej wejście zostaną podane pozostałe dwa argumenty. Ma ona zwracać wynik wykonanej funkcji anonimowej. 

Sama funkcja ma mieć taki wygląd:

function runMe(a, b, c) {

...

}

 Natomiast wpisując już poza nią poniższą linijkę:

console.log(runMe((a, b) => a + b, 4, 5));

Powinien wyświetlić się wynik (w tym przypadku 9).

 

Nie rozumiem jednak jak dokładnie takie coś działa (a raczej, jak powinno działać) i jak to napisać. Szukałem na googlach i czytałem różne strony o funkcjach anonimowych, ale nic z tego co znalazłem nie wyjaśniło mi dostatecznie co i jak, ani nie pomogło w wymyśleniu jakiegoś rozwiązania. Dlatego zwracam się z prośbą o wytłumaczenie tego jak dokładnie się tym posługiwać i o co z tym w ogóle chodzi. 

 

Za wszelkie odpowiedzi, z góry dziękuję. 

1 odpowiedź

+3 głosów
odpowiedź 11 listopada 2022 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 11 listopada 2022 przez xTMx3
 
Najlepsza

Może łatwiej będzie Ci zrozumieć, gdy funkcja będzie nazwana:

function sum(a, b) {
  return a + b;
}

function runMe(a, b, c) { /* kod */ }

console.log(
  runMe(
    sum, // <-- referencja do nazwanej funkcji `sum`
    4,
    5
  )
);

Pod zmienną sum jest dostępna funkcja, która przyjmuje argumenty a oraz b, sumuje je i zwraca. W przypadku użycia funkcji anonimowej, do runMe przekazujesz (jako pierwszy argument) funkcję już bez nazwy:

function runMe(a, b, c) { /* kod */ }

console.log(
  runMe(
    function (a, b) { // <-- to samo co `sum` wcześniej, ale można wywołać tylko wewnątrz `runMe`
      return a + b;
    },
    4,
    5
  )
);

Z perspektywy funkcji runMe, która odbiera funkcję jako argument (w tym kontekście określaną jako callback), parametr a jest po prostu funkcją, którą można wywołać lub przekazać ją gdzieś dalej. Samo przekazanej funkcji nazwanej lub anonimowej ma mniej istotne znaczenie - nazwane funkcje częściej są łatwiejsze w ewentualnym odnalezieniu ich w callstacku (w razie wystąpienia błędu) i można je wywołać (często korzystając z rekursji) w scopie, gdzie zostały zadeklarowane (w przeciwieństwie do anonimowej, która nazwę otrzymuje dopiero jako parametr tam, gdzie zostanie przekazana; ewentualnie gdy jest to function expression). Większe znaczenie może mieć przekazanie funkcji strzałkowej VS nie-strzałkowej ("normalnej"), bo wtedy różnice są bardziej istotne (m.in. inaczej działa this, nie można dowiązać argumentów, nie można wywołać jako konstruktor).

Jeśli masz jakieś dodatkowe pytania, to śmiało.

2
komentarz 11 listopada 2022 przez xTMx3 Obywatel (1,560 p.)
Po krótkiej przerwie na "odświerzenie" głowy i przeczytaniu twojego komentarza wszystko stało się jasne. Dziękuję za pomoc.

Podobne pytania

0 głosów
2 odpowiedzi 550 wizyt
pytanie zadane 4 sierpnia 2016 w JavaScript przez Adam Jakś Dyskutant (8,940 p.)
0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 12 września 2019 w JavaScript przez Bartłomiej Bolesta Obywatel (1,630 p.)
0 głosów
1 odpowiedź 332 wizyt

92,669 zapytań

141,567 odpowiedzi

320,033 komentarzy

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

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!

...