Жабылуулар жана 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 чейин санап, андан кийин эсептөө баштан башталсын.