Шумориш бо истифода аз closure дар JavaScript

Биёед коди дидашударо ба тавре нависем, ки функсияи баргардонидашуда ҳар дафъа қимати тағйирёбандаи num ро як воҳа афзоиш диҳад:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++; // як воҳа меафзоем
  }
}

let func = test();

Ҳосил мешавад, ки ҳар даъвати функсияи func қимати навро ба консол мебарорад:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  }
}

let func = test();

func(); //1-ро мебарорад
func(); //2-ро мебарорад
func(); //3-ро мебарорад
func(); //4-ро мебарорад
func(); //5-ро мебарорад

Ҳосил мешавад, ки мо шумориши даъвати функсияҳоро амалӣ кардем, бо истифода аз closure (дақиқтар, бо истифода аз тағйирёбандаи num аз closure-и функсияи мо).

Дар назар доред, ки ҳар даъвати функсияи test функсияи наверо бармегардонад, ки closure-и худро дорад. Яъне шуморишҳои гуногун мустақил кор мекунанд:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  };
}

let func1 = test(); // шумориши аввал
func1();  //1-ро мебарорад
func1();  //2-ро мебарорад

let func2 = test(); // шумориши дуюм
func2();  //1-ро мебарорад
func2();  //2-ро мебарорад

Ҳосил мешавад, ки ҳамон тағйирёбандаи num барои функсияҳои гуногун қиматҳои гуногун хоҳад дошт!

Яъне агар мо функсияи test-ро ду маротиба даъват кунем, он гоҳ функсияҳое, ки аз он ба даст омадаанд, ба таври мустақил кор карда, ҳар яке аз онҳо тағйирёбандаи мустақили num-ро хоҳанд дошт.

Задание 1

Худ, ба коди ман наменазаред, шумориши даъвати функсияеро амалӣ кунед, ки бо closure кор мекунад.

Задание 2

Бигзор функсия дар closure рақами 10-ро нигоҳ дорад. Ба тавре созед, ки ҳар даъвати функсия ин рақамро 1 кам кунад ва рақами камшударо ба консол мебарорад.

Задание 3

Масъалаи гузаштаро тавре дигаргардонед, ки шумориш то 0 бирасад, он гоҳ ҳар даъвати баъдинаи функсия паёмеро ба консол мебарорад, ки шумориш ба поён расидааст.