• 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
212 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 535 wizyt
pytanie zadane 4 sierpnia 2016 w JavaScript przez Adam Jakś Dyskutant (8,940 p.)
0 głosów
1 odpowiedź 301 wizyt
pytanie zadane 12 września 2019 w JavaScript przez Bartłomiej Bolesta Obywatel (1,630 p.)
0 głosów
1 odpowiedź 308 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...