JavaScript да Closure ва Функцияни Жойида Чакириш

Сиз билланоқ, номсиз функцияни жойида чақириб, унинг иш натижасини қандайдир ўзгарувчига тенглаш мумкин:

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

console.log(result); // '!' чиқади

Кўпинча, жойида чақирилаётган функцияни шундай ҳолда айлана рақамли қавс ичига оладилар, гарчи бунда зарурат бўлмаса-да. Бу функциянинг жойида чақирилаётганини дарҳол кўриш учун қилинади:

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

console.log(result); // '!' чиқади

Энди жойида чақирилган функциянинг натижаси номсиз функция бўлсин:

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

func(); // '!' чиқади

Қайтарилаётган функция closure да 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 гача ҳисобласин, сўнг ҳисоб бошланғичдан бошлансин.