Variable local de contador en JavaScript

Consideremos el siguiente código:

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

test()(); // mostrará 1
test()(); // mostrará 1

¿Por qué siempre se mostrará el número 1? Para entenderlo, reescribamos nuestro código de otra manera:

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

let func1 = test(); //!! primera función
func1();  //mostrará 1

let func2 = test(); //!! segunda función
func2();  //mostrará 1

Es decir, cada llamada a la función test de esta manera: test()(), crea su propia función con su propio cierre e inmediatamente invoca a esa función.

Задание 1

Determine, sin ejecutar el código, qué se mostrará en la consola:

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

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

Determine, sin ejecutar el código, qué se mostrará en la consola:

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

let test = func;

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