Globális számlálóváltozó JavaScriptben

Vegyük ki a num változót a függvényeken kívülre, ezzel globálissá téve:

javascriptlet num = 1; // globális változó

function test() {
  return function() {
    console.log(num);
    num++;
  };
}

Ebben az esetben minden visszaadott függvény módosítani fogja ezt a globális változót, és a számlálók már egymástól függően fognak működni:

javascriptlet num = 1;

function test() {
  return function() {
    console.log(num);
    num++;
  };
}

let func1 = test(); // első számláló
func1();  // kiírja: 1
func1();  // kiírja: 2

let func2 = test(); // második számláló
func2();  // kiírja: 3
func2();  // kiírja: 4

Miért csinálták független számlálókat a korábbi kódjaink? Emlékeztetőül a kód:

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

Az a helyzet, hogy a num változó lokális a test függvényen belül. Ezért a test minden meghívása a saját lokális változóját hozza létre.

Ezért a visszaadott függvények mind a test függvény saját lokális változójára fognak hivatkozni. Pontosan így érhető el a független működés.

Ha a num változót globálissá tesszük, az továbbra is zárás lesz. Csak a visszaadott függvények lexikai környezetei ugyanarra a num változóra fognak hivatkozni - a változóval kapcsolatos bármely módosítás látható lesz minden függvényben.

Задание 1

Határozd meg, kód futtatása nélkül, mi jelenik meg a konzolon:

javascriptlet counter = 0;
    
function test() {
  return function() {
    console.log(counter);
    counter++;
  };
}

let func = test;

let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Задание 2

Határozd meg, kód futtatása nélkül, mi jelenik meg a konzolon:

javascriptfunction test() {
  let counter = 0;
  
  return function() {
    return function() {
      console.log(counter);
      counter++;
    };
  };
}

let func = test()();

let func1 = func;
let func2 = func;
func1();
func2();
func1();
func2();
Задание 3

Határozd meg, kód futtatása nélkül, mi jelenik meg a konzolon:

javascriptfunction test() {
  let counter = 0;
  
  return function() {
    return function() {
      console.log(counter);
      counter++;
    };
  };
}

let func = test();

let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();