// HIGHER ORDER FUNCTIONS
// on fn'id mis toimivad koos teiste fn'dega. Need kas tagastavad fn'e v on nende argumentideks fn
// fn mis võtab argumendiks fn'i ja jooksutab seda kolm korda
function callThreeTimes(f){
f();
f();
f();
}
function cry(){
console.log("I'm so sad");
}
function hate(){
console.log("I hate everything!");
}
// Antud juhul on fn callThreeTimes argumendiks fn hate mida jooksutatakse 3 korda
// callThreeTimes(hate);
// Siin on argumendiks fn ja selle jooksutamise kordade arv
function repeat(action, num){
for(let a = 0; a < num; a++){
action();
}
}
// repeat(cry, 39);
// argumendiks on 2 fn'i, vastavalt sellele mis on muutuja rand väärtus valitakse üks või teine argument
function pickOne(f1, f2){
let rand = Math.random();
if(rand < 0.5){
f1();
}else{
f2();
}
}
pickOne(cry, hate);
// Fn mis tagastab teisi fn'e ehk nagu funktsioonide vabrik
// multiplyBy argumendiks on num ja see tagastab anonüümse fn'i argumendiga x mis omakorda tagastab x ja num korrutise
function multiplyBy(num){
return function(x){
return x * num;
}
}
// Antud juhul korrutatakse x 3'ga
const triple = multiplyBy(3);
// kutsudes fn triple, on selle argumendiks x, seega x'i korrutatakse 3'ga