Lokal räknarvariabel i JavaScript

Betrakta följande kod:

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

test()(); // kommer att skriva ut 1
test()(); // kommer att skriva ut 1

Varför kommer alltid talet 1 att skrivas ut? För att förstå detta, låt oss skriva om vår kod på ett annat sätt:

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

let func1 = test(); //!! den första funktionen
func1();  //kommer att skriva ut 1

let func2 = test(); //!! den andra funktionen
func2();  //kommer att skriva ut 1

Det vill säga, varje anrop till funktionen test på detta sätt: test()(), skapar sin egen funktion med sitt eget stängning och anropar omedelbart denna funktion.

Задание 1

Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:

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

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

Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:

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

let test = func;

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