Бројач на затворања во JavaScript
Ајде да го преработиме кодот што го разгледавме
така што вратената функција секој пат
ја зголемува вредноста на променливата num
за еден:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // додаваме еден
}
}
let func = test();
Ќе испадне дека секој повик на функцијата func
ќе испишува нова вредност во конзола:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //ќе испише 1
func(); //ќе испише 2
func(); //ќе испише 3
func(); //ќе испише 4
func(); //ќе испише 5
Излегува дека имплементиравме бројач на повици
на функции, користејќи затворање (поточно користејќи
променлива num од затворањето на нашата функција).
Имајте на ум дека секој повик на функцијата test
ќе враќа нова функција, која
ќе има свое затворање. Тоа значи дека различни бројачи
ќе работат независно:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // прв бројач
func1(); //ќе испише 1
func1(); //ќе испише 2
let func2 = test(); // втор бројач
func2(); //ќе испише 1
func2(); //ќе испише 2
Излегува дека истата променлива num
за различни функции ќе има различна вредност!
Тоа значи дека ако ја повикаме функцијата test
два пати, тогаш добиените од неа функции ќе
работат независно и секоја од
овие функции ќе има своја независна
променлива num.
Самостојно, без да го погледнувате мојот код, имплементирајте бројач на повик на функција, кој работи на затворања.
Нека функцијата во затворањето чува број 10.
Направете така што секој повик на функцијата
ќе го намалува овој број за 1 и ќе ја
прикажува намалената вредност во конзола.
Модифицирајте ја претходната задача така што
одбројувањето ќе стигне до 0, а потоа секој
нареден повик на функцијата ќе испишува во конзола
порака дека одбројувањето е завршено.