Hej, mam dwa pytania dotyczące funkcji JavaScript.
Pytanie pierwsze: Jaka jest różnica pomiędzy przekazaniem funkcji jako argument do innej funkcji, a jej zwykłym wywołaniem w tej funkcji?
Gdzieś przeczytałem, że w JS można przekazywać funkcje jako argumenty do innych funkcji, więc przykładowo napisałem poniższy skrypt:
function getData(number, FunctionOne, FunctionTwo){
if(number >= 0){
FunctionOne();
}
else{
FunctionTwo();
}
}
function FunctionPlus(){
console.log("To jest funkcja plusowa");
}
function FunctionMinus(){
console.log("To jest funkcja minusowa");
}
getData(1, FunctionPlus, FunctionMinus);
Skrypt jedyne co robi, to wywołuje funkcję getData, która jako argument pobiera liczbę i dwie funkcje FunctionPlus i FunctionMinus. Następnie w zależności czy liczba jest większa od 0, jest wywoływana odpowiednia funkcja. Jednak zrobiłem też drugą wersję tego skryptu:
function getData(number){
if(number >= 0){
FunctionMinus();
}
else{
FunctionPlus();
}
}
getData(1);
function FunctionPlus(){
console.log("To jest funkcja plusowa");
}
function FunctionMinus(){
console.log("To jest funkcja minusowa");
}
Skrypt działa w zasadzie w identyczny sposób, jednak zamiast przekazywać funkcje przez argument, po prostu wywołałem je w funkcji getData. I teraz czy może mi ktoś wytłumaczyć, jaka jest ogólnie idea przekazywania funkcji przez argument do innej funkcji, skoro mogę ją bezpośrednio wywołać, tak jak w kodzie nr 2? Chyba, że tutaj pokazałem jakiś "ułomny" przykład, ale w rzeczywistości wydaje mi się, że przekazywanie funkcji przez argument jest bardzo przydatne i często stosowane.
Drugie pytanie dotyczy zwracania funkcji przez inną funkcję. Do czego to się może przydać? Tutaj nawet nie jestem w stanie wymyślić jakiegokolwiek przykładu, ale wiem że w JS funkcje mogą zwracać inne funkcje i mimo tego, że wiem jak to zrobić, to nie widzę żadnego powodu, aby zwracać funkcję za pomocą słowa kluczowego return (tj. nie czuję idei, po co to robić i do czego to się może przydać). Mógłby mi ktoś to wyjaśnić i ewentualnie poratować jakimś prostym przykładem?