Затворања и повикување на функција на место во JavaScript

Како што веќе знаете, може да повикате анонимна функција на место и да го доделите резултатот од нејзината работа на некоја променлива:

javascriptlet result = function() {
  return '!';
}();

console.log(result); // ќе испише '!'

Често функцијата што се повикува на место, во таков случај се става во заградни скоби, иако во ова нема потреба. Ова се прави со цел веднаш да се види дека функцијата се повикува на место:

javascriptlet result = (function() {
  return '!';
})();

console.log(result); // ќе испише '!'

Нека сега резултатот од повиканата на место функција да биде анонимна функција:

javascriptlet func = (function() {
  return function() {
    console.log('!');
  }
})();

func(); // ќе испише '!'

Ајде да направиме така што вратената функција ќе чува во затворање променлива num:

javascriptlet func = (function() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
})();

Ако се додаде уште num++, тогаш функцијата func ќе стане готов бројач:

javascriptlet func = (function() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  }
})();

func(); // ќе испише 1
func(); // ќе испише 2
func(); // ќе испише 3
func(); // ќе испише 4
func(); // ќе испише 5
Задание 1

Без да го погледнувате мојот код, самостојно имплементирајте таков бројач.

Задание 2

Модифицирајте го работењето на бројачот така што тој ќе брои до 5, а потоа броењето да започне од почеток.