Globale veranderlike teller in JavaScript

Laat ons die veranderlike num buite die funksies plaas, en sodoende 'n globale veranderlike daarvan maak:

javascriptlet num = 1; // globale veranderlike

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

In hierdie geval sal alle teruggekeerde funksies die globale veranderlike verander en die tellers sal alreeds van mekaar afhanklik werk:

javascriptlet num = 1;

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

let func1 = test(); // eerste teller
func1();  // sal 1 wys
func1();  // sal 2 wys

let func2 = test(); // tweede teller
func2();  // sal 3 wys
func2();  // sal 4 wys

Hoekom het ons vorige kode dan onafhanklike tellers gemaak? Laat ek hierdie kode onthou:

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

Die saak is dat die veranderlike num - plaaslik binne die funksie test is. Daarom skep elke oproep van test sy eie plaaslike veranderlike.

Dus sal die teruggekeerde funksies elk verwys na hul eie plaaslike veranderlike van die funksie test. Dit is presies hoe onafhanklikheid bereik word.

As jy num 'n globale veranderlike maak - sal dit ook 'n sluiting wees. Net die leksikale omgewings van die teruggekeerde funksies verwys na dieselfde veranderlike num - enige veranderinge aan hierdie veranderlike sal sigbaar wees in alle funksies.

Задание 1

Bepaal, sonder om die kode uit te voer, wat in die konsole uitgevoer sal word:

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

Bepaal, sonder om die kode uit te voer, wat in die konsole uitgevoer sal word:

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

Bepaal, sonder om die kode uit te voer, wat in die konsole uitgevoer sal word:

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();