Një numërues me mbyllje në JavaScript

Le ta rishkruajmë kodin që kemi shqyrtuar në mënyrë që funksioni i kthyer çdo herë të rrisë vlerën e variablit num për një:

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

let func = test();

Kështu, çdo thirrje e funksionit func do të shfaqë në konsolë një vlerë të re:

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

let func = test();

func(); //do të shfaqë 1
func(); //do të shfaqë 2
func(); //do të shfaqë 3
func(); //do të shfaqë 4
func(); //do të shfaqë 5

Kështu, ne kemi implementuar një numërues të thirrjeve të funksioneve, duke përdorur mbyllje (më saktë duke përdorur variablin num nga mbyllja e funksionit tonë).

Kini parasysh se çdo thirrje e funksionit test do të kthejë një funksion të ri, i cili do të ketë mbylljen e vet. Kjo do të thotë se numërues të ndryshëm do të punojnë në mënyrë të pavarur:

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

let func1 = test(); // numëruesi i parë
func1();  //do të shfaqë 1
func1();  //do të shfaqë 2

let func2 = test(); // numëruesi i dytë
func2();  //do të shfaqë 1
func2();  //do të shfaqë 2

Kështu, e njëjta variabël num për funksione të ndryshëm do të ketë vlera të ndryshme!

Kjo do të thotë se nëse e thirrim funksionin test dy herë, atëherë funksionet e marra prej tij do të punojnë në mënyrë të pavarur dhe secili prej këtyre funksioneve do të ketë variablin e saj të pavarur num.

Задание 1

Vetë, pa parë në kodin tim, implementoni një numërues të thirrjeve të funksionit, që punon me mbyllje.

Задание 2

Le të ruajë funksioni në mbyllje numrin 10. Bëni që çdo thirrje e funksionit të zvogëlojë këtë numër për 1 dhe të shfaqë në konsolë numrin e zvogëluar.

Задание 3

Modifikoni detyrën e mëparshme në mënyrë që numërimi të arrijë 0, dhe pastaj çdo thirrje pasuese e funksionit të shfaqë në konsolë mesazhin se numërimi ka përfunduar.