Брояч със затваряния в 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, а след това всяко
последващо извикване на функцията да извежда в конзолата
съобщение, че отброяването е приключило.