JavaScript-dä global sanaw üýtgeýjisi

num üýtgeýjisini funksiýalaryň daşyna çykaryp, şeýlelik bilen ony global edeliň:

javascriptlet num = 1; // global üýtgeýji

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

Bu ýagdaýda, gaýdyp berilýän ähli funksiýalar bu global üýtgeýjini üýtgeder we sanawçylar artık bir-birine bagly işler:

javascriptlet num = 1;

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

let func1 = test(); // birinji sanawçy
func1();  // 1 görkezer
func1();  // 2 görkezer

let func2 = test(); // ikinji sanawçy
func2();  // 3 görkezer
func2();  // 4 görkezer

Öňki kodymyz nädip garaşsyz sanawçylar döredýärdi? Bu kody ýatladyp:

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

Mesele şonda, num üýtgeýjisi - test funksiýasynyň içinde lokaldyr. Şonuň üçin her test çagyryşy öz lokal üýtgeýjisini döredýär.

Şonuň üçin gaýdyp berilýän funksiýalar her biri test funksiýasynyň öz lokal üýtgeýjisine ýüz tutar. Işiň garaşsyzlygy edil şeýle gazanylyar.

Eger num global üýtgeýji edilse - bu hem ýapyşma bolar. Diňe gaýdyp berilýän funksiýalaryň leksik daşlaýyşlary bir num üýtgeýjisine ýüz tutýar - bu üýtgeýjideki islendik üýtgeşiklik ähli funksiýalarda görüner.

Задание 1

Kody işletmezden öň, konsola näme çykjakdygyny kesgitleň:

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

Kody işletmezden öň, konsola näme çykjakdygyny kesgitleň:

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

Kody işletmezden öň, konsola näme çykjakdygyny kesgitleň:

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