Тағйирёбандаи глобалии ҳисобкунак дар JavaScript

Тағйирёбандаи num-ро берун аз функсияҳо мебарем, бинобар ин онро глобалӣ месозем:

javascriptlet num = 1; // тағйирёбандаи глобалӣ

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

Дар ин ҳолат, ҳамаи функсияҳои баргардонидашуда ин тағйирёбандаи глобалиро тағйир медиҳанд ва ҳисобкунакҳо аллакай аз ҳам вобаста кор мекунанд:

javascriptlet num = 1;

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

let func1 = test(); // ҳисобкунаки якум
func1();  // 1-ро чоп мекунад
func1();  // 2-ро чоп мекунад

let func2 = test(); // ҳисобкунаки дуюм
func2();  // 3-ро чоп мекунад
func2();  // 4-ро чоп мекунад

Чаро рамзи мо пештара ҳисобкунакҳои мустақил месохт? Ин рамзро ба ёд меоварем:

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

Ҳақиқат он аст, ки тағйирёбандаи num - локалӣ дар дохили функсияи test мебошад. Аз ин рӯ, ҳар як фарохонӣ ба test тағйирёбандаи локалии худро ба вучуд меорад.

Аз ин рӯ, функсияҳои баргардонидашуда ба ҳар як тағйирёбандаи локалии функсияи test ишора мекунанд. Айнан ҳамин тавр истиқлолият ба даст оварда мешавад.

Агар num-ро тағйирёбандаи глобалӣ созем - ин ҳам замыкание хоҳад буд. Танҳо муҳити лексикии функсияҳои баргардонидашуда ба як тағйирёбандаи якхелаи num ишора мекунад - ҳар гуна тағйирот дар ин тағйирёбанда дар ҳамаи функсияҳо намоён хоҳад буд.

Задание 1

Муайян кунед, бидуни оғози код, ки чӣ ба консол бароварда мешавад:

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

Муайян кунед, бидуни оғози код, ки чӣ ба консол бароварда мешавад:

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

Муайян кунед, бидуни оғози код, ки чӣ ба консол бароварда мешавад:

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