Skaitiklis su uždariniais JavaScript
Perrašykime anksčiau nagrinėtą kodą taip,
kad grąžinama funkcija kiekvieną kartą
padidintų kintamojo num reikšmę
vienetu:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // pridedame vienetą
}
}
let func = test();
Pasirodo, kad kiekvienas funkcijos func
iškvietimas atspausdins konsolėje naują reikšmę:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //atspausdins 1
func(); //atspausdins 2
func(); //atspausdins 3
func(); //atspausdins 4
func(); //atspausdins 5
Pasirodo, kad mes įgyvendinome funkcijų iškvietimų
skaitiklį, naudodami uždarinį (tiksliau, naudodami
kintamąjį num iš mūsų funkcijos uždarinio).
Turėkite omenyje, kad kiekvienas funkcijos test
iškvietimas grąžins naują funkciją, kuri
turės savo uždarinį. Tai reiškia, kad skirtingi skaitikliai
veiks nepriklausomai:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // pirmasis skaitiklis
func1(); //atspausdins 1
func1(); //atspausdins 2
let func2 = test(); // antrasis skaitiklis
func2(); //atspausdins 1
func2(); //atspausdins 2
Pasirodo, kad tas pats kintamasis num
skirtingoms funkcijoms turės skirtingą reikšmę!
Tai reiškia, kad jei mes iškviestume funkciją test
du kartus, tai iš jos gautos funkcijos
veiktų nepriklausomai ir kiekviena iš
šių funkcijų turės savo nepriklausomą
kintamąjį num.
Savarankiškai, nežiūrėdami į mano kodą, įgyvendinkite funkcijos iškvietimų skaitiklį, veikiantį naudojant uždarinius.
Tegul funkcija uždaryme saugo skaičių 10.
Padarykite taip, kad kiekvienas funkcijos
iškvietimas sumažintų šį skaičių 1 ir atspausdintų
konsolėje sumažintą skaičių.
Modifikuokite ankstesnį uždavinį taip, kad
atgalinis skaičiavimas pasiektų 0, o tada kiekvienas
vėlesnis funkcijos iškvietimas atspausdintų konsolėje
pranešimą, kad atgalinis skaičiavimas baigtas.