-
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