Laskuri sulkeumilla JavaScriptissä

Kirjoitetaan käsitelty koodi uudelleen siten, että palautettu funktio kasvattaa muuttujan num arvoa yhdellä jokaisella kerralla:

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

let func = test();

Käy niin, että jokainen funktion func kutsu tulostaa konsoliin uuden arvon:

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

let func = test();

func(); //tulostaa 1
func(); //tulostaa 2
func(); //tulostaa 3
func(); //tulostaa 4
func(); //tulostaa 5

Olemme siis toteuttaneet funktiokutsujen laskurin, hyödyntäen sulkeumaa (tarkemmin sanottuna käyttäen muuttujaa num funktiomme sulkeumasta).

Huomioi, että jokainen funktion test kutsu palauttaa uuden funktion, jolla on oma sulkeumansa. Eli eri laskurit toimivat itsenäisesti:

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

let func1 = test(); // ensimmäinen laskuri
func1();  //tulostaa 1
func1();  //tulostaa 2

let func2 = test(); // toinen laskuri
func2();  //tulostaa 1
func2();  //tulostaa 2

Eli sama muuttuja num eri funktioilla on eri arvo!

Eli jos kutsumme funktiota test kaksi kertaa, niin siitä saatavat funktiot toimivat itsenäisesti ja kukin niistä on oma itsenäinen muuttuja num.

Задание 1

Toteuta itsenäisesti, katsomatta koodiini, funktiokutsujen laskuri, joka toimii sulkeumilla.

Задание 2

Olkoon funktiolla sulkeumassa luku 10. Tee niin, että jokainen funktion kutsu vähentää tätä lukua 1:llä ja tulostaa konsoliin vähennetyn luvun.

Задание 3

Muokkaa edellistä tehtävää niin, että laskenta etenee 0:aan saakka, minkä jälkeen jokainen seuraava funktiokutsu tulostaa konsoliin viestin siitä, että laskenta on päättynyt.