Opanowaliście już podstawy funkcji,
a teraz pomówmy o czymś
trochę trudniejszym:
o różnicy między zmiennymi
lokalnymi i globalnymi.
Może nie znacie tych terminów.
Zacznijmy od przykładu.
Napisałam program, który pokaże,
ile cali urosłam w dzieciństwie.
Ludzie rosną w różnym tempie.
Wymyśliłam funkcję, „calcInches”,
gdzie wprowadzam wiek startowy
i końcowy oraz cale rocznie.
Program oblicza, ile urosłam
w danym okresie
i podaje wynik.
Tu jest okres od 0 do 8 lat.
Przywołuję „calcInches”
i wprowadzam 0, 8 oraz 2,5.
Ponieważ rosłam
jakieś 2,5 cala rocznie.
Program oblicza i podaje wynik: 20.
Teraz okres od 8. do 16. roku.
Wprowadzam 8, 16 i 2,
bo wtedy tak szybko nie rosłam.
Wynik: 16.
Świetnie, ale chcę pokazać,
o ile cali urosłam
w całym dzieciństwie.
Jak to zrobić?
Spojrzę na program i pomyślę:
„Jakie mam tu wartości?”.
Czy coś może pokazywać
całkowitą liczbę cali?
Mam zmienną „totalInches”
(całkowita liczba cali)
wewnątrz funkcji „calcInches”,
więc mogę zobaczyć,
co tu jest. Zacznę tutaj.
Wpiszmy „totalInches, 10, 200”
i umieśćmy to na dole.
Co mamy?
Pokazał się ludzik „O, nie!”.
Mówi, że jest problem:
„totalInches” niezdefiniowane!
Dziwne. Przecież to definiowaliśmy.
„var totalInches =”.
Kłopot polega na tym,
że określiliśmy
„totalInches” wewnątrz funkcji.
W tym wierszu.
Zmienna, którą określimy w funkcji,
to tzw. zmienna lokalna.
Żyje tylko w tej funkcji.
Program poza funkcją
nie widzi zmiennych lokalnych
wewnątrz niej.
Widzi tylko to,
co zostanie zwrócone.
Widzi tę wartość, ale nie zmienną.
Gdy próbujemy użyć
„totalInches” poza funkcją,
program nie wie, co to jest i mówi:
„Nie znam tej zmiennej.
Nie jest zdefiniowana, nie pokażę jej”.
Jest sposób, żeby program
na zewnątrz widział zmienną.
Robimy ze zmiennej lokalnej
- globalną.
Musimy przesunąć definicję
poza funkcję,
do zakresu globalnego.
Teraz, wewnątrz funkcji,
zmieniamy tylko wartość.
Nie określamy funkcji.
Jak widać, tu mówi:
„całkowity wzrost - 16”.
Program znalazł zmienną,
bo stała się globalna.
Ale nie jest to wartość,
której szukamy.
Tylko wartość najświeższa.
Bo zawsze, gdy przywołujemy funkcję,
stosuje „totalInches”
do tego, co akurat liczy.
Chcemy więc mieć nową zmienną,
w której będzie się zawierać
tylko całkowita suma
zwiększająca się
przy każdym obliczaniu.
Zamieńmy to z powrotem
na zmienną lokalną,
zróbmy nową zmienną globalną
o nazwie „lifeInches”
i zacznijmy od zera.
Wewnątrz funkcji
dodamy coś do zmiennej globalnej
pisząc: „lifeInches += totalInches”.
Dodamy sumę obliczoną
przy każdym przywołaniu funkcji.
Dodamy ją do zmiennej globalnej
„lifeInches”.
I wynik wyświetli się u dołu.
Jest! Całkowity przyrost.
Nie tyle mam wzrostu.
Jestem wyższa.
Bo rodzimy się mając więcej
niż 0 cali długości.
Żeby uzyskać całość, zacznę od 20.
I tyle mam wzrostu.
No dobrze, powtórzmy.
„TotalInches” to zmienna lokalna.
Wiemy to, bo widzimy ją
wewnątrz tej funkcji,
a nie poza nią.
Tzn., że ten kod na zewnątrz
nie wie o zmiennej „totalInches”.
A „lifeInches”
to tzw. zmienna globalna.
Wiemy to, bo widzimy ją
poza funkcjami,
w naszym zakresie globalnym.
Pamiętajcie o tym, określając
funkcje i zmienne.
I pomyślcie, czy chcecie mieć zmienną
lokalną tylko dla swojej funkcji,
czy globalną dla całego programu.
Nie szkodzi,
że nie do końca rozumiecie.
To jedno z najtrudniejszych pojęć
w programowaniu, głównie w JavaScript.
Ćwiczcie, a będzie wam wychodzić
coraz lepiej!