Laskuri sulkeumilla JavaScriptissä
Kirjoitetaan käsitelty koodi uudelleen
siten, että palautettu funktio kasvattaa
muuttujan num arvoa yhdellä
jokaisella kerralla:
function 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:
function 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:
function 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.
Toteuta itsenäisesti, katsomatta koodiini, funktiokutsujen laskuri, joka toimii sulkeumilla.
Olkoon funktiolla sulkeumassa luku 10.
Tee niin, että jokainen funktion kutsu
vähentää tätä lukua 1:llä ja tulostaa
konsoliin vähennetyn luvun.
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.