Nyní, když jste zvládli
základy funkcí,
budeme mluvit o tématu,
které může být trochu složitější.
Tím tématem je rozdíl mezi
lokální a globální proměnnou.
Tyto výrazy vám asi
teď nic neříkají.
Začněme tedy příkladem.
Udělala jsem program,
abych ukázala,
o kolik palců jsem vyrostla
během mého dětství.
Lidé rostou různým tempem,
proto jsem vytvořila
funkci nazvanou calcInches.
Tato funkce má parametry
startAge, endAge a inchesPerYear.
Tedy počáteční a konečný
věk a přírůstek za rok.
Funkce by měla spočítat,
o kolik palců jsem celkem
v určité době vyrostla.
Nakonec vrátí hodnotu
každému, kdo ji zavolá.
Takže zde můžete vidět
období od 0 do 8 let.
Zavoláme funkci calcInches
s hodnotami 0, 8 a 2,5.
2,5, protože jsem rostla
asi 2,5 palce za rok.
Funkce tedy provede výpočet
a vyplivne hodnotu 20.
Pak od 8 do 16, zavoláme funkci
s hodnotami 8 a 16 a pak 2.
2, protože jsem moc nerostla,
a vidíte, že to vyplivne 16.
Tohle je hezké, ale teď
bychom chtěli skutečně zobrazit,
o kolik palců jsem vyrostla celkem
za celé moje dětství.
Jak to uděláme?
Můžeme začít tím,
že se podíváme na kód
a zapřemýšlíme se nad tím:
„Jaké hodnoty tady máme? “
Mám tu nějakou proměnou,
která představuje celkový počet palců?
Uvnitř funkce calcInches máme
proměnnou totalInches,
tedy v češtině "celkový počet palců".
Takže bychom to mohli jen vypsat
a vidět, co to řekne.
Napíšeme tedy "text" a v závorkách
"totalInches, 10 a 200" a dáme to na konec.
Co se stane?
A jéje zobrazila se nám chybová hláška.
Říká, že proměnná
totalInches není definována.
No to je divné,
protože jsme přece
totalInches zde definovali.
Zadefinovali jsme to pomocí
var totalInches rovná se.
Problém je, že jsme deklarovali
totalInches uvnitř funkce.
Zde na tomto řádku.
A když deklarujeme proměnnou
uvnitř funkce,
tak je považována
za lokální proměnnou.
Žije pouze uvnitř
funkce, zde v calcInches.
A kód, který je mimo tuto funkci,
nevidí lokální proměnné uvnitř funkcí.
Vidí jen to, co se vrátí.
Vidí pouze tuto hodnotu,
ne proměnnou.
Takže, když se pokusíme použít totalInches
mimo danou funkci,
tak neví, co to je a říká:
„Hej, nikdy dříve jsem
neviděl tuto proměnnou.
Není definována, nemůžu ji zobrazit.“
Existuje tedy způsob, jak udělat,
aby vnější kód tuto
proměnnou viděl?
Ano je a to tak, že uděláme z
lokální proměnné globální proměnnou.
To můžeme udělat přesunem definice
mimo funkci, do tvz. globálního rozsahu.
Funkce nyní tuto proměnnou
bude pouze měnit.
Není nutné ji znovu definovat.
Takže vidíte, že to říká:
"Celkový růst v průběhu života je 16"
Takže našel proměnnou, protože
jsme z ní udělali globální proměnnou.
Ale ve skutečnosti to není hodnota,
kterou hledáme.
Je to jen poslední hodnota.
A to proto, že pokaždé,
když zavoláme tuto funkci,
je výsledek totalInches
jen v určitém období.
Takže to, co opravdu chceme, je
nová proměnná.
Tu použijeme jen
pro uložení celkové hodnoty.
Do ní se přidají hodnoty
vždy, když budeme počítat.
Takže to pojďme změnit zpět
na lokální proměnnou.
A vytvořme úplně novou globální proměnnou,
nazvanou lifeInches a nastavíme ji na 0.
A pak uvnitř funkce přidáme tuto
globální proměnou napsáním:
lifeInches plus rovná se totalInches.
Kdykoli tedy voláme funkci,
přičte se nová hodnota
k globální proměnné lifeInches.
A potom dole zobrazíme lifeInches
napsáním:
text(lifeInches, 10, 200).
Tada! Vidíme náš celkový
růst v průběhu života.
Teď to vlastně není tak vysoké číslo.
Jsem vyšší než to,
protože se rodíme s více než 0.
Takže pokud chceme celkový počet,
možná bychom mohli začít ve 20.
Tohle už udává,
jak jsem vysoká měřeno v palcích.
Pojďme si to shrnout.
totalInches je to,
čemu říkáme lokální proměnná.
Víme to, protože vidíme její zavedení
uvnitř funkce a ne mimo funkci.
A to znamená, že
tento vnější kód zde,
neví o této proměnné
nazvané totalInches.
Proměnnou lifeInches nazýváme
globální proměnnou.
Deklarovali jsme ji
totiž mimo funkci.
Tedy v našem globálním rozsahu.
Zkuste na to myslet, když píšete
své funkce a proměnné.
Promyslete si,
jestli chcete lokální proměnné
pouze pro danou funkci
nebo globální proměnné
pro celý program.
Nebojte se, pokud je to těžké
a jdeme vám hlava kolem.
Je to jeden z nejsložitějších
konceptů v programování.
Zejména v JavaScriptu.
A je to něco, v čem se
postupně procvičováním zlepšíte