Skaitītāja lokālais mainīgais JavaScript

Apskatīsim šādu kodu:

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

test()(); // izvadīs 1
test()(); // izvadīs 1

Kāpēc vienmēr tiks izvadīts skaitlis 1? Lai to saprastu, pārrakstīsim mūsu kodu savādāk:

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

let func1 = test(); //!! pirmā funkcija
func1();  //izvadīs 1

let func2 = test(); //!! otrā funkcija
func2();  //izvadīs 1

Tas ir, katrs funkcijas test izsaukums šādā veidā: test()(), izveido savu funkciju ar savu aizvērumu un uzreiz izsauc šo funkciju.

Задание 1

Nosakiet, nepalaistot kodu, kas tiks izvadīts konsole:

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

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

Nosakiet, nepalaistot kodu, kas tiks izvadīts konsole:

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

let test = func;

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