ildar-k
1/21/2020 - 10:56 AM

Higher order functions

// 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