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