Brojač na zatvaranjima u JavaScript-u
Hajde da prepišemo kod koji smo razmotrili
tako da vraćena funkcija svaki put
uvećava vrednost promenljive num
za jedan:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // dodajemo jedan
}
}
let func = test();
Ispostavlja se da će svaki poziv funkcije func
ispisivati novu vrednost u konzolu:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //ispisaće 1
func(); //ispisaće 2
func(); //ispisaće 3
func(); //ispisaće 4
func(); //ispisaće 5
Ispostavlja se da smo implementirali brojač poziva
funkcija, koristeći zatvaranje (tačnije koristeći
promenljivu num iz zatvaranja naše funkcije).
Imajte u vidu da će svaki poziv funkcije test
vraćati novu funkciju, koja će imati
svoje vlastito zatvaranje. To znači da će različiti brojači
raditi nezavisno:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // prvi brojač
func1(); //ispisaće 1
func1(); //ispisaće 2
let func2 = test(); // drugi brojač
func2(); //ispisaće 1
func2(); //ispisaće 2
Ispostavlja se da će ista promenljiva num
za različite funkcije imati različitu vrednost!
To znači da ako pozovemo funkciju test
dva puta, tada će funkcije dobijene iz nje
raditi nezavisno i svaka od
tih funkcija će imati svoju nezavisnu
promenljivu num.
Samostalno, ne zagledajući se u moj kod, implementirajte brojač poziva funkcije, koji radi na zatvaranjima.
Neka funkcija u zatvaranju čuva broj 10.
Uredite tako da svaki poziv funkcije
smanji ovaj broj za 1 i ispiše
u konzolu smanjeni broj.
Modifikujte prethodni zadatak tako da
odbrojavanje stigne do 0, a zatim svaki
svaki naredni poziv funkcije ispiše u konzolu
poruku da je odbrojavanje završeno.