Skaitītājs ar aizvērumiem JavaScript

Pārrakstīsim apskatīto kodu tā, lai atgrieztā funkcija katru reizi palielinātu mainīgā num vērtību par vienu:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++; // pieskaitām vienu
  }
}

let func = test();

Izrādīsies, ka katrs funkcijas func izsaukums izvadīs konsolē jaunu vērtību:

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

let func = test();

func(); //izvadīs 1
func(); //izvadīs 2
func(); //izvadīs 3
func(); //izvadīs 4
func(); //izvadīs 5

Izrādās, ka mēs esam realizējis funkciju izsaukumu skaitītāju, izmantojot aizvērumu (precīzāk, izmantojot mainīgo num no mūsu funkcijas aizvēruma).

Ņemiet vērā, ka katrs funkcijas test izsaukums atgriezīs jaunu funkciju, kurai būs savs aizvērums. Tas nozīmē, ka dažādi skaitītāji strādās neatkarīgi:

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

let func1 = test(); // pirmais skaitītājs
func1();  //izvadīs 1
func1();  //izvadīs 2

let func2 = test(); // otrais skaitītājs
func2();  //izvadīs 1
func2();  //izvadīs 2

Izrādās, ka viens un tas pats mainīgais num dažādām funkcijām būs atšķirīga vērtība!

Tas nozīmē, ka, ja mēs izsauksim funkciju test divas reizes, tad no tās iegūtās funkcijas strādās neatkarīgi un katra no šīm funkcijām būs savs neatkarīgs mainīgais num.

Задание 1

Patstāvīgi, neieskatoties manā kodā, realizējiet funkcijas izsaukumu skaitītāju, kas strādā ar aizvērumiem.

Задание 2

Lai funkcija aizvērumā glabā skaitli 10. Izdariet tā, lai katrs funkcijas izsaukums samazinātu šo skaitli par 1 un izvadītu konsolē samazināto skaitli.

Задание 3

Modificējiet iepriekšējo uzdevumu tā, lai atskaitīšana sasniegtu 0, un pēc tam katrs sekojošs funkcijas izsaukums izvadītu konsolē ziņojumu par to, ka atskaitīšana ir pabeigta.