Ընդհանուր հաշվիչի փոփոխականը JavaScript-ում
num փոփոխականը դուրս կբերենք ֆունկցիաներից,
դրանով իսկ դարձնելով այն ընդհանուր.
let num = 1; // ընդհանուր փոփոխական
function test() {
return function() {
console.log(num);
num++;
};
}
Այս դեպքում բոլոր վերադարձվող ֆունկցիաները կփոխեն այս ընդհանուր փոփոխականը, և հաշվիչներն արդեն կաշխատեն միմյանցից կախված.
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // առաջին հաշվիչ
func1(); // կարտածի 1
func1(); // կարտածի 2
let func2 = test(); // երկրորդ հաշվիչ
func2(); // կարտածի 3
func2(); // կարտածի 4
Ինչո՞ւ մեր նախորդ կոդը ստեղծում էր անկախ հաշվիչներ: Հիշեցնեմ այդ կոդը.
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Բանն այն է, որ num փոփոխականը
test ֆունկցիայի ներսում տեղային է։
Ուստի test-ի յուրաքանչյուր կանչ
ստեղծում է իր տեղային փոփոխականը։
Ուստի վերադարձվող ֆունկցիաներից յուրաքանչյուրը
կհղվի test ֆունկցիայի իր տեղային
փոփոխականին։ Հենց այսպես էլ ապահովվում է
աշխատանքի անկախությունը։
Եթե num-ը դարձնենք ընդհանուր փոփոխական,
դա նույնպես կլինի փակում։ Պարզապես վերադարձվող
ֆունկցիաների բառապաշարային միջավայրերը հղվում են
num նույն փոփոխականին՝ այս փոփոխականի
ցանկացած փոփոխություն տեսանելի կլինի բոլոր
ֆունկցիաներում։
Որոշեք, առանց կոդը գործարկելու, թե ինչ կարտածվի կոնսոլում.
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Որոշեք, առանց կոդը գործարկելու, թե ինչ կարտածվի կոնսոլում.
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();
Որոշեք, առանց կոդը գործարկելու, թե ինչ կարտածվի կոնսոլում.
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();