Бројач на затварањима у JavaScript-у

Хајде да препишемо код који смо разматрали тако да враћена функција сваки пут повећава вредност променљиве num за један:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++; // додајемо један
  }
}

let func = test();

Испоставиће се да ће сваки позив функције func исписати нову вредност у конзолу:

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

javascriptfunction 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.

Задание 1

Самостално, не поткрадајући се у мој код, имплементирајте бројач позива функције, који ради на затварањима.

Задание 2

Нека функција у затварању чува број 10. Направите тако да сваки позив функције смањи овај број за 1 и испише у конзолу смањени број.

Задание 3

Модификујте претходни задатак тако да одбројавање стигне до 0, а затим сваки следећи позив функције испише у конзолу поруку да је одбројавање завршено.