ქლოჟერებზე დაფუძნებული თვლის მექანიზმი JavaScript-ში
მოდით, გადავწეროთ ჩვენ მიერ განხილული კოდი ისე,
რომ დაბრუნებული ფუნქცია ყოველ ჯერზე
გაზრდის num ცვლადის მნიშვნელობას
ერთით:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // ვამატებთ ერთს
}
}
let func = test();
გამოვა, რომ func ფუნქციის ყოველი გამოძახება
კონსოლში ახალ მნიშვნელობას გამოიტანს:
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.
გახადეთ ისე, რომ ფუნქციის ყოველი გამოძახება
ეს რიცხვი 1-ით შეამციროს
და კონსოლში გამოიტანოს შემცირებული რიცხვი.
შეუცვალეთ წინა ამოცანა ისე, რომ
თვლა მივიდეს 0-მდე, ხოლო შემდეგ
ფუნქციის ყოველი გამოძახება კონსოლში
გამოიტანოს შეტყობინებას, რომ თვლა დასრულებულია.