Lokaali laskurimuuttuja JavaScriptissä

Tarkastellaan seuraavaa koodia:

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

test()(); // tulostaa 1
test()(); // tulostaa 1

Miksi aina tulostuu numero 1? Jotta ymmärtäisimme tämän, kirjoitetaan koodimme uudelleen toisella tavalla:

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

let func1 = test(); //!! ensimmäinen funktio
func1();  //tulostaa 1

let func2 = test(); //!! toinen funktio
func2();  //tulostaa 1

Eli jokainen funktion test kutsu tällä tavalla: test()(), luo oman funktionsa omalla sulkeumallaan ja kutsuu kyseistä funktiota välittömästi.

Задание 1

Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:

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

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

Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:

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

let test = func;

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