Փակումներով հաշվիչ JavaScript-ում
Եկեք վերագրենք մեր դիտարկած կոդն այնպես,
որ վերադարձվող ֆունկցիան ամեն անգամ
mեկով ավելացնի num փոփոխականի
արժեքը.
function test() {
let num = 1;
return function() {
console.log(num);
num++; // ավելացնում ենք մեկը
}
}
let func = test();
Ստացվում է, որ func ֆունկցիայի ամեն կանչ
կonsole-ում կարտածի նոր արժեք.
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //կարտածի 1
func(); //կարտածի 2
func(); //կարտածի 3
func(); //կարտածի 4
func(); //կարտածի 5
Ստացվում է, որ մենք իրականացրել ենք ֆունկցիայի
կանչերի հաշվիչ՝ օգտագործելով փակում (ավելի ճիշտ՝ օգտագործելով
num փոփոխականը մեր ֆունկցիայի փակումից):
Հաշվի առեք, որ test ֆունկցիայի ամեն կանչ
կվերադարձնի նոր ֆունկցիա, որն իր
սեփական փակումը կունենա: Այսինքն՝ տարբեր հաշվիչներ
կաշխատեն անկախ.
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // առաջին հաշվիչ
func1(); //կարտածի 1
func1(); //կարտածի 2
let func2 = test(); // երկրորդ հաշվիչ
func2(); //կարտածի 1
func2(); //կարտածի 2
Ստացվում է, որ նույն num փոփոխականը
տարբեր ֆունկցիաների համար կունենա տարբեր արժեք:
Այսինքն, եթե մենք կանչենք test ֆունկցիան
երկու անգամ, ապա դրանից ստացված ֆունկցիաները կաշխատեն
անկախ կերպով և դրանցից յուրաքանչյուրը կունենա իր անկախ
num փոփոխականը:
Անկախ, առանց իմ կոդին նայելու, իրականացրեք ֆունկցիայի կանչի հաշվիչ, որը աշխատում է փակումների միջոցով:
Թող ֆունկցիան փակումում պահի 10 թիվը:
Կատարեք այնպես, որ ֆունկցիայի ամեն կանչ
մեկով փոքրացնի այդ թիվը և արտածի
փոքրացված թիվը կոնսոլում:
Փոփոխեք նախորդ խնդիրը այնպես, որ
հաշվարկը հասնի մինչև 0, ապա ամեն
հաջորդ ֆունկցիայի կանչը կոնսոլում արտածի
հաղորդագրություն, որ հաշվարկն ավարտված է: