Skaitītājs ar aizvērumiem JavaScript
Pārrakstīsim apskatīto kodu tā,
lai atgrieztā funkcija katru reizi
palielinātu mainīgā num vērtību
par vienu:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // pieskaitām vienu
}
}
let func = test();
Izrādīsies, ka katrs funkcijas func izsaukums
izvadīs konsolē jaunu vērtību:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //izvadīs 1
func(); //izvadīs 2
func(); //izvadīs 3
func(); //izvadīs 4
func(); //izvadīs 5
Izrādās, ka mēs esam realizējis funkciju izsaukumu skaitītāju,
izmantojot aizvērumu (precīzāk, izmantojot
mainīgo num no mūsu funkcijas aizvēruma).
Ņemiet vērā, ka katrs funkcijas test izsaukums
atgriezīs jaunu funkciju, kurai
būs savs aizvērums. Tas nozīmē, ka dažādi skaitītāji
strādās neatkarīgi:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // pirmais skaitītājs
func1(); //izvadīs 1
func1(); //izvadīs 2
let func2 = test(); // otrais skaitītājs
func2(); //izvadīs 1
func2(); //izvadīs 2
Izrādās, ka viens un tas pats mainīgais num
dažādām funkcijām būs atšķirīga vērtība!
Tas nozīmē, ka, ja mēs izsauksim funkciju test
divas reizes, tad no tās iegūtās funkcijas
strādās neatkarīgi un katra no
šīm funkcijām būs savs neatkarīgs
mainīgais num.
Patstāvīgi, neieskatoties manā kodā, realizējiet funkcijas izsaukumu skaitītāju, kas strādā ar aizvērumiem.
Lai funkcija aizvērumā glabā skaitli 10.
Izdariet tā, lai katrs funkcijas izsaukums
samazinātu šo skaitli par 1 un izvadītu
konsolē samazināto skaitli.
Modificējiet iepriekšējo uzdevumu tā, lai
atskaitīšana sasniegtu 0, un pēc tam katrs
sekojošs funkcijas izsaukums izvadītu konsolē
ziņojumu par to, ka atskaitīšana ir pabeigta.