Qapamalar ve JavaScript-də Funksiyanın Yerində Çağırılması

Artıq bildiyiniz kimi, anonim funksiyanı yerində çağırmaq və iş nəticəsini hansısa dəyişənə mənimsətmək olar:

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

console.log(result); // çap edəcək '!'

Tez-tez yerində çağırılan funksiyanı belə hallarda dairəvi mötərizələrə alırlar, baxmayaraq ki, buna ehtiyac yoxdur. Bu ona görə edilir ki, dərhal görünsün ki, funksiya yerində çağırılır:

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

console.log(result); // çap edəcək '!'

İndi icra edilmiş yerində çağırılan funksiyanın nəticəsi anonim funksiya olsun:

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

func(); // çap edəcək '!'

Gəlin elə edək ki, qaytarılan funksiya qapamada num dəyişənini saxlasın:

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

Əgər num++ əlavə etsək, onda func funksiyası hazır sayğaca çevriləcək:

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

func(); //çap edəcək 1
func(); //çap edəcək 2
func(); //çap edəcək 3
func(); //çap edəcək 4
func(); //çap edəcək 5
Задание 1

Mənim koduma gizlincə baxmadan, müstəqil şəkildə eyni sayğacı həyata keçirin.

Задание 2

Sayğacın işini elə dəyişin ki, o 5-ə qədər saysın, sonra isə sayma yenidən başlasın.