522
Rozdział 11 .
Implementacja licznika z użyciem domknięć
Zastosowanie domknięć w celu zaimplementowania
magicznego licznika
var count = 0;
function counter() {
counter = counter + 1;
return count;
}
Jedynym problemem, jaki możemy wskazać w tym kodzie, jest to, że użyto w nim zmiennej
globalnej
count
, co może być problematyczne, gdy nad kodem pracuje zespół programistów
(a to dlatego, że ludzie często używają tych samych nazw, co potem powoduje konflikty).
A co byś powiedział na informację, że istnieje sposób zaimplementowania takiego licznika
z wykorzystaniem całkowicie lokalnej i chronionej zmiennej
count
? Wtedy zyskałbyś licznik,
który nigdy nie będzie kolidował z żadnym innym kodem, a jedynym sposobem inkrementacji
jego wartości będzie wywołanie funkcji (inaczej nazywanej domknięciem).
W celu zaimplementowania licznika z użyciem domknięcia możemy wykorzystać
przeważającą większość kodu przedstawionego powyżej. Patrz i podziwiaj.
function makeCounter() {
var count = 0;
function counter() {
count = count + 1;
return count;
}
return counter;
}
Taki licznik moglibyśmy wykorzystać w następujący sposób.
console.log(counter());
console.log(counter());
console.log(counter());
Konsola JavaScript
1
2
3
Tu mamy zmienną globalną
o nazwie count.
Każde wywołanie funkcji counter
inkrementuje globalną zmienną count
i zwraca jej nową wartość.
A zatem możemy
inkrementować nasz
licznik i wyświetlać jego
wartość w taki sposób.
Tutaj tworzymy zmienną count wewnątrz
funkcji makeCounter. A zatem count jest
zmienną lokalną, a nie globalną.
Teraz tworzymy funkcję
counter, która inkrementuje
wartość zmiennej count.
A tu zwracamy funkcję counter.
Czy sądzisz, że ta magiczna sztuczka się uda? Przekonajmy się…
To jest domknięcie. A w środowisku funkcji counter
przechowywana jest wartość zmiennej count.
Czy myślałeś kiedyś o zaimplementowaniu funkcji działającej jako licznik?
Mogłaby ona wyglądać jakoś tak.
Get Programowanie w JavaScript Rusz głową! now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.