Aizvēršanas un funkcijas izsaukšana uzreiz JavaScript

Kā jūs jau zināt, ir iespējams uzreiz izsaukt anonīmu funkciju un piešķirt tās darbības rezultātu kādam mainīgajam:

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

console.log(result); // izvadīs '!'

Bieži vien funkciju, kas tiek izsaukta uzreiz, šādā gadījumā ieliek apaļās iekavās, lai gan tam nav īstas vajadzības. Tas tiek darīts, lai uzreiz būtu redzams, ka funkcija tiek izsaukta uzreiz:

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

console.log(result); // izvadīs '!'

Ļaujiet tagad izsauktās uzreiz funkcijas rezultātam būt anonīmai funkcijai:

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

func(); // izvadīs '!'

Izveidosim tā, lai atgrieztā funkcija glabātu aizvēršanā mainīgo num:

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

Ja pievienosim vēl num++, tad funkcija func kļūs par gatavu skaitītāju:

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

func(); //izvadīs 1
func(); //izvadīs 2
func(); //izvadīs 3
func(); //izvadīs 4
func(); //izvadīs 5
Задание 1

Neieskatoties manā kodā, patstāvīgi realizējiet šādu pašu skaitītāju.

Задание 2

Modificējiet skaitītāja darbību tā, lai tas skaitītu līdz 5, un pēc tam skaitīšana sāktos no jauna.