Variabilă locală a contorului în JavaScript

Să luăm în considerare următorul cod:

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

test()(); // va afișa 1
test()(); // va afișa 1

De ce va fi afișat întotdeauna numărul 1? Pentru a înțelege acest lucru, să rescriem codul nostru altfel:

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

let func1 = test(); //!! prima funcție
func1();  //va afișa 1

let func2 = test(); //!! a doua funcție
func2();  //va afișa 1

Adică, fiecare apel al funcției test în acest fel: test()(), creează propria sa funcție cu propria sa închidere și apelează imediat această funcție.

Задание 1

Determinați, fără a rula codul, ce va fi afișat în consolă:

javascriptfunction func() {
  let num = 0;
  
  return function() {
    console.log(num);
    num++;
  };
}

func()();
func()();
func()();
Задание 2

Determinați, fără a rula codul, ce va fi afișat în consolă:

javascriptfunction func() {
  let num = 0;
  
  return function() {
    console.log(num);
    num++;
  };
}

let test = func;

test()();
test()();
test()();