1 00:00:00,764 --> 00:00:03,070 Nyní, když jste zvládli základy funkcí, 2 00:00:03,070 --> 00:00:07,396 budeme mluvit o tématu, které může být trochu složitější. 3 00:00:07,396 --> 00:00:10,984 Tím tématem je rozdíl mezi lokální a globální proměnnou. 4 00:00:11,374 --> 00:00:14,179 Tyto výrazy vám asi teď nic neříkají. 5 00:00:14,179 --> 00:00:16,364 Začněme tedy příkladem. 6 00:00:16,364 --> 00:00:18,110 Udělala jsem program, abych ukázala, 7 00:00:18,110 --> 00:00:20,346 o kolik palců jsem vyrostla během mého dětství. 8 00:00:20,506 --> 00:00:22,087 Lidé rostou různým tempem, 9 00:00:22,087 --> 00:00:24,458 proto jsem vytvořila funkci nazvanou calcInches. 10 00:00:24,458 --> 00:00:27,430 Tato funkce má parametry startAge, endAge a inchesPerYear. 11 00:00:27,430 --> 00:00:29,700 Tedy počáteční a konečný věk a přírůstek za rok. 12 00:00:29,700 --> 00:00:31,433 Funkce by měla spočítat, 13 00:00:31,433 --> 00:00:34,874 o kolik palců jsem celkem v určité době vyrostla. 14 00:00:34,874 --> 00:00:37,362 Nakonec vrátí hodnotu každému, kdo ji zavolá. 15 00:00:37,362 --> 00:00:40,093 Takže zde můžete vidět období od 0 do 8 let. 16 00:00:40,093 --> 00:00:44,354 Zavoláme funkci calcInches s hodnotami 0, 8 a 2,5. 17 00:00:44,354 --> 00:00:47,717 2,5, protože jsem rostla asi 2,5 palce za rok. 18 00:00:48,297 --> 00:00:51,904 Funkce tedy provede výpočet a vyplivne hodnotu 20. 19 00:00:52,171 --> 00:00:57,939 Pak od 8 do 16, zavoláme funkci s hodnotami 8 a 16 a pak 2. 20 00:00:57,939 --> 00:01:01,133 2, protože jsem moc nerostla, a vidíte, že to vyplivne 16. 21 00:01:01,913 --> 00:01:05,312 Tohle je hezké, ale teď bychom chtěli skutečně zobrazit, 22 00:01:05,312 --> 00:01:08,071 o kolik palců jsem vyrostla celkem za celé moje dětství. 23 00:01:08,771 --> 00:01:11,705 Jak to uděláme? 24 00:01:11,705 --> 00:01:13,999 Můžeme začít tím, že se podíváme na kód 25 00:01:13,999 --> 00:01:17,045 a zapřemýšlíme se nad tím: „Jaké hodnoty tady máme? “ 26 00:01:17,045 --> 00:01:20,582 Mám tu nějakou proměnou, která představuje celkový počet palců? 27 00:01:20,582 --> 00:01:24,100 Uvnitř funkce calcInches máme proměnnou totalInches, 28 00:01:24,100 --> 00:01:26,038 tedy v češtině "celkový počet palců". 29 00:01:26,038 --> 00:01:30,560 Takže bychom to mohli jen vypsat a vidět, co to řekne. 30 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. 31 00:01:36,440 --> 00:01:37,895 Co se stane? 32 00:01:37,895 --> 00:01:40,942 A jéje zobrazila se nám chybová hláška. 33 00:01:40,942 --> 00:01:45,556 Říká, že proměnná totalInches není definována. 34 00:01:45,556 --> 00:01:47,624 No to je divné, 35 00:01:47,624 --> 00:01:49,962 protože jsme přece totalInches zde definovali. 36 00:01:49,962 --> 00:01:52,492 Zadefinovali jsme to pomocí var totalInches rovná se. 37 00:01:52,492 --> 00:01:58,145 Problém je, že jsme deklarovali totalInches uvnitř funkce. 38 00:01:58,145 --> 00:01:59,594 Zde na tomto řádku. 39 00:01:59,594 --> 00:02:01,854 A když deklarujeme proměnnou uvnitř funkce, 40 00:02:01,854 --> 00:02:04,314 tak je považována za lokální proměnnou. 41 00:02:05,234 --> 00:02:09,076 Žije pouze uvnitř funkce, zde v calcInches. 42 00:02:09,076 --> 00:02:15,794 A kód, který je mimo tuto funkci, nevidí lokální proměnné uvnitř funkcí. 43 00:02:15,794 --> 00:02:18,194 Vidí jen to, co se vrátí. 44 00:02:18,194 --> 00:02:21,804 Vidí pouze tuto hodnotu, ne proměnnou. 45 00:02:21,804 --> 00:02:24,767 Takže, když se pokusíme použít totalInches mimo danou funkci, 46 00:02:24,767 --> 00:02:26,250 tak neví, co to je a říká: 47 00:02:26,250 --> 00:02:28,596 „Hej, nikdy dříve jsem neviděl tuto proměnnou. 48 00:02:28,596 --> 00:02:31,072 Není definována, nemůžu ji zobrazit.“ 49 00:02:32,202 --> 00:02:34,610 Existuje tedy způsob, jak udělat, 50 00:02:34,610 --> 00:02:37,198 aby vnější kód tuto proměnnou viděl? 51 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. 52 00:02:42,736 --> 00:02:50,879 To můžeme udělat přesunem definice mimo funkci, do tvz. globálního rozsahu. 53 00:02:51,229 --> 00:02:54,322 Funkce nyní tuto proměnnou bude pouze měnit. 54 00:02:54,322 --> 00:02:58,342 Není nutné ji znovu definovat. 55 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" 56 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. 57 00:03:06,648 --> 00:03:09,515 Ale ve skutečnosti to není hodnota, kterou hledáme. 58 00:03:09,625 --> 00:03:11,552 Je to jen poslední hodnota. 59 00:03:11,552 --> 00:03:13,938 A to proto, že pokaždé, když zavoláme tuto funkci, 60 00:03:13,938 --> 00:03:17,794 je výsledek totalInches jen v určitém období. 61 00:03:18,714 --> 00:03:21,930 Takže to, co opravdu chceme, je nová proměnná. 62 00:03:21,930 --> 00:03:24,662 Tu použijeme jen pro uložení celkové hodnoty. 63 00:03:24,662 --> 00:03:29,228 Do ní se přidají hodnoty vždy, když budeme počítat. 64 00:03:29,228 --> 00:03:32,563 Takže to pojďme změnit zpět na lokální proměnnou. 65 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. 66 00:03:40,634 --> 00:03:43,881 A pak uvnitř funkce přidáme tuto globální proměnou napsáním: 67 00:03:43,881 --> 00:03:49,478 lifeInches plus rovná se totalInches. 68 00:03:49,478 --> 00:03:51,586 Kdykoli tedy voláme funkci, 69 00:03:51,586 --> 00:03:56,403 přičte se nová hodnota k globální proměnné lifeInches. 70 00:03:56,403 --> 00:03:58,972 A potom dole zobrazíme lifeInches napsáním: 71 00:03:58,972 --> 00:04:01,299 text(lifeInches, 10, 200). 72 00:04:01,299 --> 00:04:03,538 Tada! Vidíme náš celkový růst v průběhu života. 73 00:04:03,538 --> 00:04:06,431 Teď to vlastně není tak vysoké číslo. 74 00:04:06,431 --> 00:04:10,839 Jsem vyšší než to, protože se rodíme s více než 0. 75 00:04:10,839 --> 00:04:13,984 Takže pokud chceme celkový počet, možná bychom mohli začít ve 20. 76 00:04:14,284 --> 00:04:17,265 Tohle už udává, jak jsem vysoká měřeno v palcích. 77 00:04:17,265 --> 00:04:20,036 Pojďme si to shrnout. totalInches je to, 78 00:04:20,036 --> 00:04:22,157 čemu říkáme lokální proměnná. 79 00:04:22,157 --> 00:04:27,612 Víme to, protože vidíme její zavedení uvnitř funkce a ne mimo funkci. 80 00:04:28,521 --> 00:04:30,822 A to znamená, že tento vnější kód zde, 81 00:04:30,822 --> 00:04:34,373 neví o této proměnné nazvané totalInches. 82 00:04:34,813 --> 00:04:37,656 Proměnnou lifeInches nazýváme globální proměnnou. 83 00:04:37,656 --> 00:04:41,295 Deklarovali jsme ji totiž mimo funkci. 84 00:04:41,295 --> 00:04:43,586 Tedy v našem globálním rozsahu. 85 00:04:43,586 --> 00:04:46,980 Zkuste na to myslet, když píšete své funkce a proměnné. 86 00:04:47,158 --> 00:04:48,834 Promyslete si, 87 00:04:48,834 --> 00:04:51,310 jestli chcete lokální proměnné pouze pro danou funkci 88 00:04:51,310 --> 00:04:54,646 nebo globální proměnné pro celý program. 89 00:04:54,646 --> 00:04:57,354 Nebojte se, pokud je to těžké a jdeme vám hlava kolem. 90 00:04:57,354 --> 00:04:59,927 Je to jeden z nejsložitějších konceptů v programování. 91 00:04:59,927 --> 00:05:01,730 Zejména v JavaScriptu. 92 00:05:01,730 --> 00:05:06,000 A je to něco, v čem se postupně procvičováním zlepšíte