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