Globalna spremenljivka števca v JavaScript

Postavimo spremenljivko num zunaj funkcij, s čimer jo naredimo globalno:

javascriptlet num = 1; // globalna spremenljivka

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

V tem primeru bodo vse vrnjene funkcije spreminjale to globalno spremenljivko in števci bodo delovali odvisno drug od drugega:

javascriptlet num = 1;

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

let func1 = test(); // prvi števec
func1();  // izpiše 1
func1();  // izpiše 2

let func2 = test(); // drugi števec
func2();  // izpiše 3
func2();  // izpiše 4

Zakaj je naša prejšnja koda ustvarila neodvisne števce? Spomnimo se te kode:

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

Bistvo je v tem, da je spremenljivka num lokalna znotraj funkcije test. Zato vsak klic test ustvari svojo lokalno spremenljivko.

Zato se bodo vrnjene funkcije sklicevale vsaka na svojo lokalno spremenljivko funkcije test. Prav tako se doseže neodvisnost delovanja.

Če naredimo num globalno spremenljivko - bo to prav tako zaklepanje. Preprosto leksikalna okolja vrnjenih funkcij se sklicujejo na isto spremenljivko num - vse spremembe te spremenljivke bodo vidne v vseh funkcijah.

Задание 1

Določite, brez zaganjanja kode, kaj se bo izpisalo v konzolo:

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

Določite, brez zaganjanja kode, kaj se bo izpisalo v konzolo:

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

Določite, brez zaganjanja kode, kaj se bo izpisalo v konzolo:

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