Tellermed lukking i JavaScript

La oss omskrive koden vi har sett på så den returnerte funksjonen hver gang øker verdien av variabelen num med én:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++; // legger til én
  }
}

let func = test();

Det vil si at hvert kall til funksjonen func vil skrive en ny verdi til konsollen:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  }
}

let func = test();

func(); //skriver ut 1
func(); //skriver ut 2
func(); //skriver ut 3
func(); //skriver ut 4
func(); //skriver ut 5

Det viser seg at vi implementerte en funksjonskallteller ved å bruke lukking (mer presist ved å bruke variabelen num fra lukkingen til funksjonen vår).

Vær oppmerksom på at hvert kall til funksjonen test vil returnere en ny funksjon, som vil ha sin egen lukking. Det vil si at forskjellige tellere vil fungere uavhengig:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  };
}

let func1 = test(); // første teller
func1();  //skriver ut 1
func1();  //skriver ut 2

let func2 = test(); // andre teller
func2();  //skriver ut 1
func2();  //skriver ut 2

Det viser seg at den samme variabelen num for forskjellige funksjoner vil ha forskjellige verdier!

Det vil si at hvis vi kaller funksjonen test to ganger, vil funksjonene hentet fra den fungere uavhengig og hver av disse funksjonene vil ha sin egen uavhengige variabel num.

Задание 1

Implementer selv, uten å se på koden min, en funksjonskallteller som fungerer med lukking.

Задание 2

La funksjonen i lukkingen lagre tallet 10. Gjør slik at hvert funksjonskall reduserer dette tallet med 1 og skriver det reduserte tallet til konsollen.

Задание 3

Modifiser den forrige oppgaven slik at nedtellingen når 0, og deretter hvert påfølgende funksjonskall skriver en melding til konsollen om at nedtellingen er avsluttet.