od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
Język JavaScript posiada dwa rodzaje funkcji.
Pierwsze są to, można powiedzieć zwykłe
funkcje, a drugie funkcje strzałkowe, o których powiemy w jednej z kolejnych lekcji.
W tej lekcji skupimy się na tych zwykłych
funkcjach, na tym, jak je tworzyć i pokażę Ci do tego w zasadzie trzy różne sposoby.
Więc najprostszym sposobem utworzenia
funkcji jest napisanie słowa function i następnie podajemy nazwę takiej funkcji.
Jeżeli chodzi o nazewnictwo funkcji, to
tutaj obowiązują dokładnie te same zasady, które są przy nazywaniu zmiennych.
Czyli możemy sobie funkcję nazwać np.
sayHello,
w ten sposób, następnie podajemy parę
nawiasów okrągłych i blok kodu, który się wykona, kiedy wywołamy tę funkcję.
Czyli to jest tak naprawdę definicja funkcji.
W ten sposób to robimy i nie musimy tego przepisywać do żadnej zmiennej.
Jeżeli zrobimy to tak, to można
powiedzieć, że tak jakbyśmy utworzyli taką zmienną sayHello, bo właśnie po tej
nazwie będziemy się mogli do tej funkcji odwołać.
Funkcje są traktowane w JavaScript jak
obiekty, czyli możemy je przekazywać, przypisywać do zmiennych itd.
Czyli podobnie jak np. tablice czy takie zwykłe obiekty.
I teraz wewnątrz takiego bloku kodu
znajduje się ciało funkcji, czyli to co chcemy wykonać, kiedy funkcja się wywoła.
Zróbmy sobie tutaj po prostu Witaj świecie.
Może coś takiego, ok i samo to w sobie tylko definiuje funkcje
na stronie nic się oczywiście nie wydarzy,
ale teraz w dowolnym miejscu możemy taką funkcję wywołać właśnie odwołując się
przez referencję po jej nazwie i dodając parę nawiasów okrągłych.
To jest wywołanie naszej funkcji, które sprawia, że kod w niej zawarty się wykona.
No i teraz zobaczyliśmy tutaj Witaj świecie.
Drugim sposobem na utworzenie funkcji
będzie przypisanie jej do zmiennej czy stałej.
Możemy sobie utworzyć taką stałą sayHello2
na przykład i przypisać tutaj funkcję bez nazwy.
Nazywamy to funkcją anonimową, czyli funkcja nie musi mieć nazwy.
Możemy ją w ten sposób utworzyć i wewnątrz
oczywiście jej ciało tu możemy powiedzieć np. cześć.
Teraz przypisaliśmy to do stałej
i można powiedzieć, że na pierwszy rzut oka w zasadzie niczym to się nie różni,
dlatego, że tutaj po tym identyfikatorze sayHello mogliśmy się odwołać
a teraz jak się odwołam do sayHello2, to
też tak naprawdę to kieruje na taką funkcję, a więc mogę tę funkcję bez
problemu wywołać i zobaczymy komunikat Cześć.
Więc czym to się różni?
W zasadzie jest tutaj jedna istotna różnica.
Otóż funkcje w języku JavaScript utworzone
w ten sposób są hoistowane, czyli wynoszone do samej góry z zakresu zmiennych.
Oznacza to tylko tyle, że jak utworzę
funkcję w ten sposób, to mogę ją wywołać zanim została zdefiniowana.
Czyli rozpoczynamy kod i tak naprawdę już wywołuję funkcję, a ona dopiero później
jest zdefiniowana i zobacz, że to działa dokładnie tak samo.
Natomiast jeżeli przypisuję funkcję do
stałej lub zmiennej, to ona nie może być użyta wcześniej niż została przypisana.
Zobacz, to nam wygeneruje błąd.
Dlatego właśnie, że najpierw się
odwołujemy, a dopiero potem to zostało utworzone.
Czyli to jest jedna taka subtelna różnica.
I mamy jeszcze trzeci sposób tworzenia
funkcji, w zasadzie prawie identyczny jak drugi, powiedzmy sayHello3.
I tu możemy przypisać funkcję, która będzie miała swoją nazwę np.
hello. W ten sposób i tu zrobimy
console.log
Witam, może tak i teraz czym to się różni?
W zasadzie nie różni się niczym od tego zapisu poza tym, że jak funkcji nadamy jej
nazwę to możemy po tej nazwie wewnątrz tej funkcji odwołać się do niej samej.
Czyli gdybyśmy tworzyli tzw.
funkcję rekurencyjną, która pod pewnymi warunkami wykonuje sama siebie, to po
prostu wewnątrz mogę się odwołać do tego hello.
I podobnie mógłbym się tutaj odwołać do
sayHello3, ale tak naprawdę ta nazwa tej zmiennej może być różna.
Czy w zasadzie ta funkcja może być przekazywana w różne miejsca, więc wtedy
bezpieczniej jest odwołać się do hello w środku.
To wynika z tego, że moglibyśmy gdzieś pod spodem napisać np.
sayHello, powiedzmy zrobilibyśmy const
sayHello4 to się równa sayHello3, a potem sayHello
ustawiłbym na wartość null.
Mam nadzieję, że wiesz o co chodzi.
To gdybym tutaj w środku odwoływał się do
sayHello3, to na pewnym etapie odwołał bym się tak naprawdę do wartości null.
Czyli nie jest to bezpieczne.
A jak sobie tutaj podam nazwę tej funkcji,
to zawsze mogę się do niej odwołać właśnie w taki oto sposób.
Więc to jest, można powiedzieć, trzeci
sposób tworzenia funkcji, czyli ona i jest przypisana do stałej i ma swoją nazwę,
natomiast tutaj odwołali byśmy się do niej poprzez sayHello3
dokładnie tak. To oczywiście wykomentuje i wynik jest taki.
A więc standardowo funkcję tworzymy tak,
natomiast można ją również przypisać do stałej czy zmiennej w taki oto sposób.