JavaScript-də Qapanışlar üzərində Sayğac
Gəlin nəzərdən keçirdiyimiz kodu elə yenidən yazaq ki,
qaytarılan funksiya hər dəfə
num dəyişəninin dəyərini
bir vahid artırsın:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // bir vahid artırırıq
}
}
let func = test();
Belə çıxır ki, func funksiyasının hər çağırılışı
konsola yeni bir dəyər çıxaracaq:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //1 çıxaracaq
func(); //2 çıxaracaq
func(); //3 çıxaracaq
func(); //4 çıxaracaq
func(); //5 çıxaracaq
Beləliklə, biz qapanışdan istifadə edərək
funksiya çağırışları üçün sayğac həyata keçirdik
(daha dəqiqi, funksiyamızın qapanışındakı
num dəyişənindən istifadə etməklə).
Nəzərə alın ki, test funksiyasının hər çağırılışı
yeni bir funksiya qaytaracaq, onun
öz qapanışı olacaq. Yəni müxtəlif sayğaclar
müstəqil işləyəcək:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // birinci sayğac
func1(); //1 çıxaracaq
func1(); //2 çıxaracaq
let func2 = test(); // ikinci sayğac
func2(); //1 çıxaracaq
func2(); //2 çıxaracaq
Belə çıxır ki, eyni num dəyişəni
müxtəlif funksiyalar üçün müxtəlif dəyərlərə sahib olacaq!
Yəni əgər biz test funksiyasını
iki dəfə çağırsaq, ondan alınan funksiyalar
müstəqil şəkildə işləyəcək və onların hər biri
öz müstəqil
num dəyişəninə sahib olacaq.
Müstəqil olaraq, mənim koduma baxmadan, qapanışlar üzərində işləyən funksiya çağırış sayğacını həyata keçirin.
Qoy funksiya qapanışda 10 ədədini saxlasın.
Elə edin ki, funksiyanın hər çağırılışı
bu ədədi 1 vahid azaltsın və
azaldılmış ədədi konsola çıxartsın.
Əvvəlki məsələni elə dəyişin ki,
geri sayım 0-a çatsın, sonra isə
hər bir sonrakı funksiya çağırışı konsola
geri sayımın bitdiyi haqqında mesaj çıxartsın.