Бројач на затварањима у 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, а затим сваки
следећи позив функције испише у конзолу
поруку да је одбројавање завршено.