Лічыльнік на замыканнях у 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
Атрымліваецца, што мы рэалізавалі лічыльнік выкліку
функцый, вiкарыстоўваючы замыканне (дакладней вiкарыстоўваючы
пераменную 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, а затым кожны
наступны выклік функцыі выводзіў у кансоль
паведамленне аб тым, што адлік скончаны.