ჩამკეტები და ფუნქციის მყისიერი გამოძახება 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-მდე, და შემდეგ თვლა თავიდან დაიწყოს.