WEBVTT 00:00:00.764 --> 00:00:03.070 Nyní, když jste zvládli základy funkcí, 00:00:03.070 --> 00:00:07.396 budeme mluvit o tématu, které může být trochu složitější. 00:00:07.396 --> 00:00:10.984 Tím tématem je rozdíl mezi lokální a globální proměnnou. 00:00:11.374 --> 00:00:14.179 Tyto výrazy vám asi teď nic neříkají. 00:00:14.179 --> 00:00:16.364 Začněme tedy příkladem. 00:00:16.364 --> 00:00:18.110 Udělala jsem program, abych ukázala, 00:00:18.110 --> 00:00:20.346 o kolik palců jsem vyrostla během mého dětství. 00:00:20.506 --> 00:00:22.087 Lidé rostou různým tempem, 00:00:22.087 --> 00:00:24.458 proto jsem vytvořila funkci nazvanou calcInches. 00:00:24.458 --> 00:00:27.430 Tato funkce má parametry startAge, endAge a inchesPerYear. 00:00:27.430 --> 00:00:29.700 Tedy počáteční a konečný věk a přírůstek za rok. 00:00:29.700 --> 00:00:31.433 Funkce by měla spočítat, 00:00:31.433 --> 00:00:34.874 o kolik palců jsem celkem v určité době vyrostla. 00:00:34.874 --> 00:00:37.362 Nakonec vrátí hodnotu každému, kdo ji zavolá. 00:00:37.362 --> 00:00:40.093 Takže zde můžete vidět období od 0 do 8 let. 00:00:40.093 --> 00:00:44.354 Zavoláme funkci calcInches s hodnotami 0, 8 a 2,5. 00:00:44.354 --> 00:00:47.717 2,5, protože jsem rostla asi 2,5 palce za rok. 00:00:48.297 --> 00:00:51.904 Funkce tedy provede výpočet a vyplivne hodnotu 20. 00:00:52.171 --> 00:00:57.939 Pak od 8 do 16, zavoláme funkci s hodnotami 8 a 16 a pak 2. 00:00:57.939 --> 00:01:01.133 2, protože jsem moc nerostla, a vidíte, že to vyplivne 16. 00:01:01.913 --> 00:01:05.312 Tohle je hezké, ale teď bychom chtěli skutečně zobrazit, 00:01:05.312 --> 00:01:08.071 o kolik palců jsem vyrostla celkem za celé moje dětství. 00:01:08.771 --> 00:01:11.705 Jak to uděláme? 00:01:11.705 --> 00:01:13.999 Můžeme začít tím, že se podíváme na kód 00:01:13.999 --> 00:01:17.045 a zapřemýšlíme se nad tím: „Jaké hodnoty tady máme? “ 00:01:17.045 --> 00:01:20.582 Mám tu nějakou proměnou, která představuje celkový počet palců? 00:01:20.582 --> 00:01:24.100 Uvnitř funkce calcInches máme proměnnou totalInches, 00:01:24.100 --> 00:01:26.038 tedy v češtině "celkový počet palců". 00:01:26.038 --> 00:01:30.560 Takže bychom to mohli jen vypsat a vidět, co to řekne. 00:01:30.560 --> 00:01:36.440 Napíšeme tedy "text" a v závorkách "totalInches, 10 a 200" a dáme to na konec. 00:01:36.440 --> 00:01:37.895 Co se stane? 00:01:37.895 --> 00:01:40.942 A jéje zobrazila se nám chybová hláška. 00:01:40.942 --> 00:01:45.556 Říká, že proměnná totalInches není definována. 00:01:45.556 --> 00:01:47.624 No to je divné, 00:01:47.624 --> 00:01:49.962 protože jsme přece totalInches zde definovali. 00:01:49.962 --> 00:01:52.492 Zadefinovali jsme to pomocí var totalInches rovná se. 00:01:52.492 --> 00:01:58.145 Problém je, že jsme deklarovali totalInches uvnitř funkce. 00:01:58.145 --> 00:01:59.594 Zde na tomto řádku. 00:01:59.594 --> 00:02:01.854 A když deklarujeme proměnnou uvnitř funkce, 00:02:01.854 --> 00:02:04.314 tak je považována za lokální proměnnou. 00:02:05.234 --> 00:02:09.076 Žije pouze uvnitř funkce, zde v calcInches. 00:02:09.076 --> 00:02:15.794 A kód, který je mimo tuto funkci, nevidí lokální proměnné uvnitř funkcí. 00:02:15.794 --> 00:02:18.194 Vidí jen to, co se vrátí. 00:02:18.194 --> 00:02:21.804 Vidí pouze tuto hodnotu, ne proměnnou. 00:02:21.804 --> 00:02:24.767 Takže, když se pokusíme použít totalInches mimo danou funkci, 00:02:24.767 --> 00:02:26.250 tak neví, co to je a říká: 00:02:26.250 --> 00:02:28.596 „Hej, nikdy dříve jsem neviděl tuto proměnnou. 00:02:28.596 --> 00:02:31.072 Není definována, nemůžu ji zobrazit.“ 00:02:32.202 --> 00:02:34.610 Existuje tedy způsob, jak udělat, 00:02:34.610 --> 00:02:37.198 aby vnější kód tuto proměnnou viděl? 00:02:37.398 --> 00:02:42.487 Ano je a to tak, že uděláme z lokální proměnné globální proměnnou. 00:02:42.736 --> 00:02:50.879 To můžeme udělat přesunem definice mimo funkci, do tvz. globálního rozsahu. 00:02:51.229 --> 00:02:54.322 Funkce nyní tuto proměnnou bude pouze měnit. 00:02:54.322 --> 00:02:58.342 Není nutné ji znovu definovat. 00:02:58.632 --> 00:03:02.484 Takže vidíte, že to říká: "Celkový růst v průběhu života je 16" 00:03:02.756 --> 00:03:06.158 Takže našel proměnnou, protože jsme z ní udělali globální proměnnou. 00:03:06.648 --> 00:03:09.515 Ale ve skutečnosti to není hodnota, kterou hledáme. 00:03:09.625 --> 00:03:11.552 Je to jen poslední hodnota. 00:03:11.552 --> 00:03:13.938 A to proto, že pokaždé, když zavoláme tuto funkci, 00:03:13.938 --> 00:03:17.794 je výsledek totalInches jen v určitém období. 00:03:18.714 --> 00:03:21.930 Takže to, co opravdu chceme, je nová proměnná. 00:03:21.930 --> 00:03:24.662 Tu použijeme jen pro uložení celkové hodnoty. 00:03:24.662 --> 00:03:29.228 Do ní se přidají hodnoty vždy, když budeme počítat. 00:03:29.228 --> 00:03:32.563 Takže to pojďme změnit zpět na lokální proměnnou. 00:03:33.663 --> 00:03:40.634 A vytvořme úplně novou globální proměnnou, nazvanou lifeInches a nastavíme ji na 0. 00:03:40.634 --> 00:03:43.881 A pak uvnitř funkce přidáme tuto globální proměnou napsáním: 00:03:43.881 --> 00:03:49.478 lifeInches plus rovná se totalInches. 00:03:49.478 --> 00:03:51.586 Kdykoli tedy voláme funkci, 00:03:51.586 --> 00:03:56.403 přičte se nová hodnota k globální proměnné lifeInches. 00:03:56.403 --> 00:03:58.972 A potom dole zobrazíme lifeInches napsáním: 00:03:58.972 --> 00:04:01.299 text(lifeInches, 10, 200). 00:04:01.299 --> 00:04:03.538 Tada! Vidíme náš celkový růst v průběhu života. 00:04:03.538 --> 00:04:06.431 Teď to vlastně není tak vysoké číslo. 00:04:06.431 --> 00:04:10.839 Jsem vyšší než to, protože se rodíme s více než 0. 00:04:10.839 --> 00:04:13.984 Takže pokud chceme celkový počet, možná bychom mohli začít ve 20. 00:04:14.284 --> 00:04:17.265 Tohle už udává, jak jsem vysoká měřeno v palcích. 00:04:17.265 --> 00:04:20.036 Pojďme si to shrnout. totalInches je to, 00:04:20.036 --> 00:04:22.157 čemu říkáme lokální proměnná. 00:04:22.157 --> 00:04:27.612 Víme to, protože vidíme její zavedení uvnitř funkce a ne mimo funkci. 00:04:28.521 --> 00:04:30.822 A to znamená, že tento vnější kód zde, 00:04:30.822 --> 00:04:34.373 neví o této proměnné nazvané totalInches. 00:04:34.813 --> 00:04:37.656 Proměnnou lifeInches nazýváme globální proměnnou. 00:04:37.656 --> 00:04:41.295 Deklarovali jsme ji totiž mimo funkci. 00:04:41.295 --> 00:04:43.586 Tedy v našem globálním rozsahu. 00:04:43.586 --> 00:04:46.980 Zkuste na to myslet, když píšete své funkce a proměnné. 00:04:47.158 --> 00:04:48.834 Promyslete si, 00:04:48.834 --> 00:04:51.310 jestli chcete lokální proměnné pouze pro danou funkci 00:04:51.310 --> 00:04:54.646 nebo globální proměnné pro celý program. 00:04:54.646 --> 00:04:57.354 Nebojte se, pokud je to těžké a jdeme vám hlava kolem. 00:04:57.354 --> 00:04:59.927 Je to jeden z nejsložitějších konceptů v programování. 00:04:59.927 --> 00:05:01.730 Zejména v JavaScriptu. 00:05:01.730 --> 00:05:06.000 A je to něco, v čem se postupně procvičováním zlepšíte