WEBVTT 00:00:00.764 --> 00:00:03.204 Opanowaliście już podstawy funkcji, 00:00:03.304 --> 00:00:07.337 a teraz pomówmy o czymś trochę trudniejszym: 00:00:07.437 --> 00:00:11.377 o różnicy między zmiennymi lokalnymi i globalnymi. 00:00:11.477 --> 00:00:14.055 Może nie znacie tych terminów. 00:00:14.155 --> 00:00:16.300 Zacznijmy od przykładu. 00:00:16.400 --> 00:00:20.381 Napisałam program, który pokaże, ile cali urosłam w dzieciństwie. 00:00:20.481 --> 00:00:24.473 Ludzie rosną w różnym tempie. Wymyśliłam funkcję, „calcInches”, 00:00:24.573 --> 00:00:29.346 gdzie wprowadzam wiek startowy i końcowy oraz cale rocznie. 00:00:29.446 --> 00:00:34.713 Program oblicza, ile urosłam w danym okresie 00:00:34.813 --> 00:00:37.384 i podaje wynik. 00:00:37.484 --> 00:00:40.378 Tu jest okres od 0 do 8 lat. 00:00:40.478 --> 00:00:44.599 Przywołuję „calcInches” i wprowadzam 0, 8 oraz 2,5. 00:00:44.699 --> 00:00:48.227 Ponieważ rosłam jakieś 2,5 cala rocznie. 00:00:48.327 --> 00:00:52.198 Program oblicza i podaje wynik: 20. 00:00:52.298 --> 00:00:58.119 Teraz okres od 8. do 16. roku. Wprowadzam 8, 16 i 2, 00:00:58.219 --> 00:01:01.727 bo wtedy tak szybko nie rosłam. Wynik: 16. 00:01:01.827 --> 00:01:05.378 Świetnie, ale chcę pokazać, 00:01:05.477 --> 00:01:08.684 o ile cali urosłam w całym dzieciństwie. 00:01:08.784 --> 00:01:11.401 Jak to zrobić? 00:01:11.501 --> 00:01:15.046 Spojrzę na program i pomyślę: 00:01:15.146 --> 00:01:17.067 „Jakie mam tu wartości?”. 00:01:17.167 --> 00:01:20.410 Czy coś może pokazywać całkowitą liczbę cali? 00:01:20.510 --> 00:01:24.172 Mam zmienną „totalInches” (całkowita liczba cali) 00:01:24.272 --> 00:01:26.331 wewnątrz funkcji „calcInches”, 00:01:26.431 --> 00:01:30.441 więc mogę zobaczyć, co tu jest. Zacznę tutaj. 00:01:30.541 --> 00:01:35.944 Wpiszmy „totalInches, 10, 200” i umieśćmy to na dole. 00:01:36.044 --> 00:01:39.063 Co mamy? 00:01:39.163 --> 00:01:40.937 Pokazał się ludzik „O, nie!”. 00:01:41.037 --> 00:01:43.026 Mówi, że jest problem: 00:01:43.126 --> 00:01:45.395 „totalInches” niezdefiniowane! 00:01:45.495 --> 00:01:49.783 Dziwne. Przecież to definiowaliśmy. 00:01:49.883 --> 00:01:51.618 „var totalInches =”. 00:01:51.718 --> 00:01:54.427 Kłopot polega na tym, że określiliśmy 00:01:54.527 --> 00:01:59.443 „totalInches” wewnątrz funkcji. W tym wierszu. 00:01:59.543 --> 00:02:02.090 Zmienna, którą określimy w funkcji, 00:02:02.190 --> 00:02:04.249 to tzw. zmienna lokalna. 00:02:05.062 --> 00:02:08.893 Żyje tylko w tej funkcji. 00:02:08.993 --> 00:02:11.959 Program poza funkcją 00:02:12.059 --> 00:02:15.372 nie widzi zmiennych lokalnych wewnątrz niej. 00:02:15.472 --> 00:02:18.135 Widzi tylko to, co zostanie zwrócone. 00:02:18.235 --> 00:02:21.339 Widzi tę wartość, ale nie zmienną. 00:02:21.439 --> 00:02:24.683 Gdy próbujemy użyć „totalInches” poza funkcją, 00:02:24.783 --> 00:02:26.996 program nie wie, co to jest i mówi: 00:02:27.096 --> 00:02:30.906 „Nie znam tej zmiennej. Nie jest zdefiniowana, nie pokażę jej”. 00:02:32.276 --> 00:02:37.222 Jest sposób, żeby program na zewnątrz widział zmienną. 00:02:37.322 --> 00:02:42.795 Robimy ze zmiennej lokalnej - globalną. 00:02:42.895 --> 00:02:47.253 Musimy przesunąć definicję poza funkcję, 00:02:47.353 --> 00:02:50.109 do zakresu globalnego. 00:02:51.266 --> 00:02:54.637 Teraz, wewnątrz funkcji, 00:02:54.737 --> 00:02:58.329 zmieniamy tylko wartość. Nie określamy funkcji. 00:02:58.429 --> 00:03:02.578 Jak widać, tu mówi: „całkowity wzrost - 16”. 00:03:02.678 --> 00:03:06.549 Program znalazł zmienną, bo stała się globalna. 00:03:06.649 --> 00:03:09.544 Ale nie jest to wartość, której szukamy. 00:03:09.644 --> 00:03:11.355 Tylko wartość najświeższa. 00:03:11.455 --> 00:03:13.793 Bo zawsze, gdy przywołujemy funkcję, 00:03:13.893 --> 00:03:17.764 stosuje „totalInches” do tego, co akurat liczy. 00:03:18.948 --> 00:03:21.967 Chcemy więc mieć nową zmienną, 00:03:22.067 --> 00:03:24.962 w której będzie się zawierać tylko całkowita suma 00:03:25.062 --> 00:03:29.142 zwiększająca się przy każdym obliczaniu. 00:03:29.242 --> 00:03:32.834 Zamieńmy to z powrotem na zmienną lokalną, 00:03:33.948 --> 00:03:37.988 zróbmy nową zmienną globalną o nazwie „lifeInches” 00:03:38.088 --> 00:03:39.854 i zacznijmy od zera. 00:03:40.634 --> 00:03:45.233 Wewnątrz funkcji dodamy coś do zmiennej globalnej 00:03:45.333 --> 00:03:49.330 pisząc: „lifeInches += totalInches”. 00:03:49.478 --> 00:03:53.221 Dodamy sumę obliczoną przy każdym przywołaniu funkcji. 00:03:53.321 --> 00:03:56.239 Dodamy ją do zmiennej globalnej „lifeInches”. 00:03:56.339 --> 00:04:00.047 I wynik wyświetli się u dołu. 00:04:00.147 --> 00:04:03.321 Jest! Całkowity przyrost. 00:04:03.421 --> 00:04:06.479 Nie tyle mam wzrostu. Jestem wyższa. 00:04:06.579 --> 00:04:10.798 Bo rodzimy się mając więcej niż 0 cali długości. 00:04:10.898 --> 00:04:13.933 Żeby uzyskać całość, zacznę od 20. 00:04:14.033 --> 00:04:16.998 I tyle mam wzrostu. 00:04:17.098 --> 00:04:18.738 No dobrze, powtórzmy. 00:04:18.839 --> 00:04:22.012 „TotalInches” to zmienna lokalna. 00:04:22.113 --> 00:04:24.637 Wiemy to, bo widzimy ją 00:04:24.737 --> 00:04:27.702 wewnątrz tej funkcji, a nie poza nią. 00:04:28.515 --> 00:04:30.953 Tzn., że ten kod na zewnątrz 00:04:31.053 --> 00:04:34.668 nie wie o zmiennej „totalInches”. 00:04:34.768 --> 00:04:37.664 A „lifeInches” to tzw. zmienna globalna. 00:04:37.764 --> 00:04:41.054 Wiemy to, bo widzimy ją poza funkcjami, 00:04:41.154 --> 00:04:42.935 w naszym zakresie globalnym. 00:04:44.026 --> 00:04:47.254 Pamiętajcie o tym, określając funkcje i zmienne. 00:04:47.354 --> 00:04:51.619 I pomyślcie, czy chcecie mieć zmienną lokalną tylko dla swojej funkcji, 00:04:51.719 --> 00:04:54.893 czy globalną dla całego programu. 00:04:54.993 --> 00:04:57.401 Nie szkodzi, że nie do końca rozumiecie. 00:04:57.501 --> 00:05:01.603 To jedno z najtrudniejszych pojęć w programowaniu, głównie w JavaScript. 00:05:01.703 --> 00:05:04.607 Ćwiczcie, a będzie wam wychodzić coraz lepiej!