JavaScript-dä global sanaw üýtgeýjisi
num üýtgeýjisini funksiýalaryň daşyna çykaryp,
şeýlelik bilen ony global edeliň:
let 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:
let 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:
function 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.
Kody işletmezden öň, konsola näme çykjakdygyny kesgitleň:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Kody işletmezden öň, konsola näme çykjakdygyny kesgitleň:
function 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();
Kody işletmezden öň, konsola näme çykjakdygyny kesgitleň:
function 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();