'n Teller op Sluitings in JavaScript

Laat ons die kode wat ons bespreek het herskryf sodat die teruggekeerde funksie elke keer die waarde van die veranderlike num met een verhoog:

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

let func = test();

Dit sal beteken dat elke oproep na die funksie func 'n nuwe waarde in die konsole sal vertoon:

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

let func = test();

func(); // sal 1 vertoon
func(); // sal 2 vertoon
func(); // sal 3 vertoon
func(); // sal 4 vertoon
func(); // sal 5 vertoon

Dit blyk dat ons 'n funksie-oproepteller geïmplementeer het deur van 'n sluiting gebruik te maak (om presies te wees, deur die veranderlike num van ons funksie se sluiting te gebruik).

Let op dat elke oproep na die funksie test 'n nuwe funksie sal teruggee, wat sy eie sluiting sal hê. Dit beteken verskillende tellers sal onafhanklik werk:

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

let func1 = test(); // eerste teller
func1();  // sal 1 vertoon
func1();  // sal 2 vertoon

let func2 = test(); // tweede teller
func2();  // sal 1 vertoon
func2();  // sal 2 vertoon

Dit beteken dat dieselfde veranderlike num vir verskillende funksies verskillende waardes sal hê!

As ons dus die funksie test twee keer aanroep, sal die funksies wat daaruit verkry word, onafhanklik werk en elkeen van hierdie funksies sal sy eie onafhanklike veranderlike num hê.

Задание 1

Implementeer self, sonder om na my kode te kyk, 'n funksie-oproepteller wat op sluitings werk.

Задание 2

Laat die funksie in die sluiting die getal 10 stoor. Maak dit so dat elke oproep van die funksie hierdie getal met 1 verminder en die verminderde getal in die konsole vertoon.

Задание 3

Wysig die vorige taak sodat die aftelling tot by 0 gaan, en dan sal elke daaropvolgende oproep van die funksie 'n boodskap in die konsole vertoon dat die aftelling voltooi is.