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!