Замыканні і выклік функцыі на месцы ў 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, а потым адлік пачынаўся зноў.