Փակումներ և անմիջական ֆունկցիայի կանչ 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, ապա հաշվարկը սկսվի սկզբից։