1 00:00:00,764 --> 00:00:03,204 Opanowaliście już podstawy funkcji, 2 00:00:03,304 --> 00:00:07,337 a teraz pomówmy o czymś trochę trudniejszym: 3 00:00:07,437 --> 00:00:11,377 o różnicy między zmiennymi lokalnymi i globalnymi. 4 00:00:11,477 --> 00:00:14,055 Może nie znacie tych terminów. 5 00:00:14,155 --> 00:00:16,300 Zacznijmy od przykładu. 6 00:00:16,400 --> 00:00:20,381 Napisałam program, który pokaże, ile cali urosłam w dzieciństwie. 7 00:00:20,481 --> 00:00:24,473 Ludzie rosną w różnym tempie. Wymyśliłam funkcję, „calcInches”, 8 00:00:24,573 --> 00:00:29,346 gdzie wprowadzam wiek startowy i końcowy oraz cale rocznie. 9 00:00:29,446 --> 00:00:34,713 Program oblicza, ile urosłam w danym okresie 10 00:00:34,813 --> 00:00:37,384 i podaje wynik. 11 00:00:37,484 --> 00:00:40,378 Tu jest okres od 0 do 8 lat. 12 00:00:40,478 --> 00:00:44,599 Przywołuję „calcInches” i wprowadzam 0, 8 oraz 2,5. 13 00:00:44,699 --> 00:00:48,227 Ponieważ rosłam jakieś 2,5 cala rocznie. 14 00:00:48,327 --> 00:00:52,198 Program oblicza i podaje wynik: 20. 15 00:00:52,298 --> 00:00:58,119 Teraz okres od 8. do 16. roku. Wprowadzam 8, 16 i 2, 16 00:00:58,219 --> 00:01:01,727 bo wtedy tak szybko nie rosłam. Wynik: 16. 17 00:01:01,827 --> 00:01:05,378 Świetnie, ale chcę pokazać, 18 00:01:05,477 --> 00:01:08,684 o ile cali urosłam w całym dzieciństwie. 19 00:01:08,784 --> 00:01:11,401 Jak to zrobić? 20 00:01:11,501 --> 00:01:15,046 Spojrzę na program i pomyślę: 21 00:01:15,146 --> 00:01:17,067 „Jakie mam tu wartości?”. 22 00:01:17,167 --> 00:01:20,410 Czy coś może pokazywać całkowitą liczbę cali? 23 00:01:20,510 --> 00:01:24,172 Mam zmienną „totalInches” (całkowita liczba cali) 24 00:01:24,272 --> 00:01:26,331 wewnątrz funkcji „calcInches”, 25 00:01:26,431 --> 00:01:30,441 więc mogę zobaczyć, co tu jest. Zacznę tutaj. 26 00:01:30,541 --> 00:01:35,944 Wpiszmy „totalInches, 10, 200” i umieśćmy to na dole. 27 00:01:36,044 --> 00:01:39,063 Co mamy? 28 00:01:39,163 --> 00:01:40,937 Pokazał się ludzik „O, nie!”. 29 00:01:41,037 --> 00:01:43,026 Mówi, że jest problem: 30 00:01:43,126 --> 00:01:45,395 „totalInches” niezdefiniowane! 31 00:01:45,495 --> 00:01:49,783 Dziwne. Przecież to definiowaliśmy. 32 00:01:49,883 --> 00:01:51,618 „var totalInches =”. 33 00:01:51,718 --> 00:01:54,427 Kłopot polega na tym, że określiliśmy 34 00:01:54,527 --> 00:01:59,443 „totalInches” wewnątrz funkcji. W tym wierszu. 35 00:01:59,543 --> 00:02:02,090 Zmienna, którą określimy w funkcji, 36 00:02:02,190 --> 00:02:04,249 to tzw. zmienna lokalna. 37 00:02:05,062 --> 00:02:08,893 Żyje tylko w tej funkcji. 38 00:02:08,993 --> 00:02:11,959 Program poza funkcją 39 00:02:12,059 --> 00:02:15,372 nie widzi zmiennych lokalnych wewnątrz niej. 40 00:02:15,472 --> 00:02:18,135 Widzi tylko to, co zostanie zwrócone. 41 00:02:18,235 --> 00:02:21,339 Widzi tę wartość, ale nie zmienną. 42 00:02:21,439 --> 00:02:24,683 Gdy próbujemy użyć „totalInches” poza funkcją, 43 00:02:24,783 --> 00:02:26,996 program nie wie, co to jest i mówi: 44 00:02:27,096 --> 00:02:30,906 „Nie znam tej zmiennej. Nie jest zdefiniowana, nie pokażę jej”. 45 00:02:32,276 --> 00:02:37,222 Jest sposób, żeby program na zewnątrz widział zmienną. 46 00:02:37,322 --> 00:02:42,795 Robimy ze zmiennej lokalnej - globalną. 47 00:02:42,895 --> 00:02:47,253 Musimy przesunąć definicję poza funkcję, 48 00:02:47,353 --> 00:02:50,109 do zakresu globalnego. 49 00:02:51,266 --> 00:02:54,637 Teraz, wewnątrz funkcji, 50 00:02:54,737 --> 00:02:58,329 zmieniamy tylko wartość. Nie określamy funkcji. 51 00:02:58,429 --> 00:03:02,578 Jak widać, tu mówi: „całkowity wzrost - 16”. 52 00:03:02,678 --> 00:03:06,549 Program znalazł zmienną, bo stała się globalna. 53 00:03:06,649 --> 00:03:09,544 Ale nie jest to wartość, której szukamy. 54 00:03:09,644 --> 00:03:11,355 Tylko wartość najświeższa. 55 00:03:11,455 --> 00:03:13,793 Bo zawsze, gdy przywołujemy funkcję, 56 00:03:13,893 --> 00:03:17,764 stosuje „totalInches” do tego, co akurat liczy. 57 00:03:18,948 --> 00:03:21,967 Chcemy więc mieć nową zmienną, 58 00:03:22,067 --> 00:03:24,962 w której będzie się zawierać tylko całkowita suma 59 00:03:25,062 --> 00:03:29,142 zwiększająca się przy każdym obliczaniu. 60 00:03:29,242 --> 00:03:32,834 Zamieńmy to z powrotem na zmienną lokalną, 61 00:03:33,948 --> 00:03:37,988 zróbmy nową zmienną globalną o nazwie „lifeInches” 62 00:03:38,088 --> 00:03:39,854 i zacznijmy od zera. 63 00:03:40,634 --> 00:03:45,233 Wewnątrz funkcji dodamy coś do zmiennej globalnej 64 00:03:45,333 --> 00:03:49,330 pisząc: „lifeInches += totalInches”. 65 00:03:49,478 --> 00:03:53,221 Dodamy sumę obliczoną przy każdym przywołaniu funkcji. 66 00:03:53,321 --> 00:03:56,239 Dodamy ją do zmiennej globalnej „lifeInches”. 67 00:03:56,339 --> 00:04:00,047 I wynik wyświetli się u dołu. 68 00:04:00,147 --> 00:04:03,321 Jest! Całkowity przyrost. 69 00:04:03,421 --> 00:04:06,479 Nie tyle mam wzrostu. Jestem wyższa. 70 00:04:06,579 --> 00:04:10,798 Bo rodzimy się mając więcej niż 0 cali długości. 71 00:04:10,898 --> 00:04:13,933 Żeby uzyskać całość, zacznę od 20. 72 00:04:14,033 --> 00:04:16,998 I tyle mam wzrostu. 73 00:04:17,098 --> 00:04:18,738 No dobrze, powtórzmy. 74 00:04:18,839 --> 00:04:22,012 „TotalInches” to zmienna lokalna. 75 00:04:22,113 --> 00:04:24,637 Wiemy to, bo widzimy ją 76 00:04:24,737 --> 00:04:27,702 wewnątrz tej funkcji, a nie poza nią. 77 00:04:28,515 --> 00:04:30,953 Tzn., że ten kod na zewnątrz 78 00:04:31,053 --> 00:04:34,668 nie wie o zmiennej „totalInches”. 79 00:04:34,768 --> 00:04:37,664 A „lifeInches” to tzw. zmienna globalna. 80 00:04:37,764 --> 00:04:41,054 Wiemy to, bo widzimy ją poza funkcjami, 81 00:04:41,154 --> 00:04:42,935 w naszym zakresie globalnym. 82 00:04:44,026 --> 00:04:47,254 Pamiętajcie o tym, określając funkcje i zmienne. 83 00:04:47,354 --> 00:04:51,619 I pomyślcie, czy chcecie mieć zmienną lokalną tylko dla swojej funkcji, 84 00:04:51,719 --> 00:04:54,893 czy globalną dla całego programu. 85 00:04:54,993 --> 00:04:57,401 Nie szkodzi, że nie do końca rozumiecie. 86 00:04:57,501 --> 00:05:01,603 To jedno z najtrudniejszych pojęć w programowaniu, głównie w JavaScript. 87 00:05:01,703 --> 00:05:04,607 Ćwiczcie, a będzie wam wychodzić coraz lepiej!