Tworzenie stron WWW w HTML, JavaScript i PHP

Maciej Żukiewicz

maciek@harmony-systems.com

Prawa autorskie do materiałów

Materiały szkoleniowe (w wersji elektronicznej i drukowanej) udostępnione przez firmę Vavatech w ramach niniejszego kursu, należą wyłącznie do firmy Harmony sp. z o.o. i podlegają ochronie na podstawie przepisów o prawie autorskim i prawach pokrewnych.

 

W związku z powyższym, każdy uczestnik szkolenia zobowiązuje się nie wykonywać

żadnych z niżej wymienionych działań:

•modyfikacja, adaptacja, zmiana, łączenie lub tłumaczenie materiałów oraz tworzenie prac pochodnych na ich podstawie;

•wypożyczanie, sprzedaż lub innego rodzaju przekazywanie materiałów szkoleniowych jakiejkolwiek stronie trzeciej;

•kopiowanie lub jakiekolwiek powielanie materiałów.

 

W ramach szkolenia uczestnik otrzymuje jedynie prawo własności otrzymanego

egzemplarza materiałów i uprawniony jest do jego używania wyłącznie w

ramach dozwolonego użytku określonego w przepisach i własności intelektualnej.

materiały

Link do prezentacji: https://goo.gl/jNjRgL

 

Link do ankiety: https://goo.gl/sfS7rw

#1//HTML

#1//HTML

Czym jest HTML?

Do czego aktualnie jest wykorzystywany?

#1//HTML

Przykładowy, podstawowy plik HTML strony WWW

<!doctype html>
<html lang="pl">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>Hello my dear!</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    </head>
    <body>
        Hello my dear!
    </body>
</html>

Które z elementów są wymagane przez standardy?

#1//HTML - SKŁADNIA

<!doctype html>
<html lang="pl">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>Hello my dear!</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        <!-- Header start -->
        <header>
            Hello!
        </header>
        <!-- Header end -->

        <!-- Content start -->
        <main id="content" class="style-secondary">
            <div>
                <h1>Lorem ipsum dolor sit.</h1>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. <em>Reiciendis, quia.</em></p>
                <p><strong>Porro, sed nemo laboriosam tempore,</strong> tempora cupiditate harum molestias voluptas!</p>
            </div>

            <div>
                <p><a href="https://placeholder.com/">Get placeholder!</a> and have fun :)</p>

                <img src="http://via.placeholder.com/350x150" alt="Image">
            </div>
        </main>
        <!-- Content end -->

        <hr>

        <!-- Footer start -->
        <footer id="footer" class="style-primary">
            Copyright 2018
        </footer>
        <!-- Footer end -->
    </body>
</html>

#1//HTML - Budowa tagu

<!-- tag posiadający tag domykający -->
<tag atrybut1="wartosc" atrybut2="wartoscA wartoscB"> ... zawartość tagu ... </tag>

<!-- tag nieposiadający tagu domykającego (samodomykający się) -->
<tag atrybut1="wartosc" atrybut2="wartoscA wartoscB">

#1//HTML - GRUPY ELEMENTÓW

  1. Na jakie dwie podstawowe grupy można podzielić elementy/tagi HTML?
  2. Czym się charakteryzują / Czym różnią się od siebie?
  3. Jakie są przykłady tagów należących do tych grup?

#1//HTML - ELEMENTY BLOKOWE

  1. Zajmują całą dostępną szerokość
  2. Zaczynają się od nowej linii
  3. W elementach blokowych możemy umieszczać inne elementy blokowe i liniowe (wyjątkiem jest tag <p> - zobacz tu)
  4. Na elementach blokowych możemy stosować właściwości modelu blokowego CSS (do zapamiętania na później :))

Charakteryzują się tym, że:

Wyświetlają się tak:

przykładowe tagi:

<div>
<header>
<nav>
<main>
<footer>
<ul>
<ol>
<table>
<form>
<h1>, <h2>, ..., <h6>
<p>
<blockquote>

Więcej na ten temat na:

#1//HTML - ELEMENTY liniowe

  1. Zajmują tylko taką szerokość jaką wymaga zawartość tagu
  2. Nie zaczynają się od nowej linii
  3. W elementach liniowych możemy umieszczać TYLKO inne elementy liniowe
  4. Na elementach liniowych nie możemy stosować właściwości modelu blokowego CSS (do zapamiętania na później :))

Charakteryzują się tym, że:

Wyświetlają się tak:

przykładowe tagi:

<a>
<strong>
<span>
<em>
<img>
<input>
<label>

Więcej na ten temat na:

#1//HTML - najczęściej wykorzystywane tagi i ich zastosowanie

  1. Jakie są najczęściej wykorzystywane tagi HTML?
  2. Do czego się je wykorzystuje w praktyce?
  3. Dlaczego ważny jest odpowiedni dobór tagów?

Więcej na ten temat na:

#1//HTML - semantyka tagów w HTML5

  1. Czym jest semantyka tagów?
  2. Na co wpływa semantyka tagów?
  3. Jakie znasz tagi semantyczne?
  4. Czym jest Document Outline?
  5. Czy Document Outline jest ważny?

Więcej na ten temat na:

#1//HTML - semantyka tagów w HTML5

A jak to wpływa na Document Outline?

#1//HTML - atrybuty

  1. Jakie znasz przykłady podstawowych atrybuty, które można nadać dla każdego dowolnego elementu HTML?
  2. Czym charakteryzują się te atrybuty, czym różnią się od siebie i do czego najczęściej są wykorzystywane?
  3. Czym są specyficzne atrybuty tagów i jakie znasz przykłady takich atrybutów?

#1//HTML - atrybuty

Atrybut Opis Przykład
id Identyfikator.  

(!) Element o danym ID może występować tylko i wyłącznie raz na danej stronie.

(!!) Każdy element HTML może posiadać maksymalnie jeden identyfikator.
<div id="header-wrapper"></div>
<section id="topic-basic-terms"></section>
class Klasa.

(!) Na stronie może się znajdować wiele elementów posiadających tą samą klasę.

(!!) Każdy element HTML może posiadać dowolną ilość klas.
<div class="color-primary">
<div class="color-primary wide-box">
<div class="color-primary wide-box small-text">
data-* Atrybut HTML5 pozwalający na tworzenie własnych atrybutów. <article data-article-title="Nice code in one week" data-article-id="5"></article>

#1//HTML - narzędzia

Jakie znasz narzędzia, dzięki którym praca z dokumentami HTML jest szybsza i wygodniejsza?

#1//HTML - narzędzia

Narzędzia przydatne podczas pracy z HTML

  1. Chrome Developer Toolbar / Firefox Developer Tools
  2. W3C Markup Validation Service (W3C Validator)
  3. Szybki i wygodny edytor (najlepiej ze Snippetami)
  4. Emmet
  5. Live Preview
  6. Linters (HTML + CSS)

#2//css

#2//css

Czym jest CSS?

Do czego jest wykorzystywany?

Jak CSS ma się do HTML'a?

#2//css - składnia

/* Domyślne style dla:
- strony głównej
- podstron tekstowych */

p{
    font-size: 16px;
    font-weight: bold;
    text-align: center;
}

.category-menu{
    width: 250px;
    height: 300px;
    float: left;
}

#main-nav{
    height: 30px;
}

#main-nav.color-primary {
    background-color: blue;
}

Czym jest selektor?

Czym jest właściwość, a czym wartość w CSS?

Jakie są rodzaje selektorów?

Czym charakteryzuje się te rodzaje?

#2//css - rodzaje selektorów

Jakie znasz kombinatory selektorów?

#2//css - kombinatory selektorów

#2//css - rodzaje selektorów

Kombinator Opis Przykład
(spacja) Wybiera wszystkie elementy a wewnątrz wszystkich elementów z klasą menu .menu a
(brak spacji) Wybiera element div mający identyfikator header oraz klasę color-primary div#header.color-primary
> Wybiera wszystkie elementy a znajdujące się bezpośrednio elemencie z klasą menu .menu > a
, Wybiera wszystkie elementy a i wszystkie elementy strong i wszystkie elementy span a, strong, span

Więcej na ten temat na:

Czym jest kaskadowość w CSS jak działa?

#2//css - Kaskadowość

#2//css - Kaskadowość

Czym jest siła/specyficzność selektorów i jak działa?

#2//css - siła selektorów

#2//css - siła selektorów

Rodzaj selektora Mnożnik
Element x1
Klasa x10
Identyfikator x100
Atrybut style x1000
<p id="main-text" class="custom-styles">
    Lorem ipsum dolor sit.
</p>
p{
    font-size: 10px;
}

.custom-styles{
    font-size: 11px;
}

p.custom-styles{
    font-size: 44px;
}

#main-text{
    font-size: 6px;
}

p#main-text{
    font-size: 22px;
}

p#main-text.custom-styles{
    font-size: 12px;
}

Więcej na ten temat na:

#2//css - Przykłady selektorów //1

/* Wszystkie paragrafi */
p {...}

/* Wszystkie elementy z klasą "menu-item" */
.menu-item {...} 

/* Element o id "main-nav" */
#man-nav {...}

/* Wszystkie elementy z atrybutem href */
[href] {...}

/* Wszystkie elementy z atrybutem rel ustawionym na nofollow */
[rel="nofollow"] {...}

/* Wszystkie elementy z atrybutem href, który zaczyna się od "file" */
[href^="file"] {...}

/* Wszystkie elementy z atrybutem href, który kończy się na ".pdf" */
[href$=".pdf"] {...}

/* Wszystkie elementy z atrybutem href, w którym znajduje się ciąg "smile" */
[href*="smile"] {...}

#2//css - Przykłady selektorów //2

/* Wszystkie paragrafi */
p {...}

/* Wszystkie elementy z klasą "menu-item" */
.menu-item {...} 

/* Element o id "main-nav" */
#man-nav {...}

/* Wszystkie elementy z atrybutem href */
[href] {...}

/* Wszystkie elementy z atrybutem rel ustawionym na nofollow */
[rel="nofollow"] {...}

/* Wszystkie elementy z atrybutem href, który zaczyna się od "file" */
[href^="file"] {...}

/* Wszystkie elementy z atrybutem href, który kończy się na ".pdf" */
[href$=".pdf"] {...}

/* Wszystkie elementy z atrybutem href, w którym znajduje się ciąg "smile" */
[href*="smile"] {...}

#2//css - Przykłady selektorów //3

/* Wszystkie tagi em strong i element z klasą hl */
em, strong, .hl {...}

/* Wszystkie paragrafy znajdujące się w elementach z klasą .section */
.section p {...}

/* Wszystkie tagi li będące bezposrednim potomkiem elementu z klasą "main-menu" */
.main-menu > li {...}

/* Wszystkie tagi a, które znajdują się w elementach 
li będących bezposrednimi potomkami elementu z klasą "main-menu" */
.main-menu > li a {...}

#2//css - Przykłady selektorów //4

/* Wszystkie tagi strong posiadające klasę "hl" */
strong.hl {...}

/* Tag ul posiadający identyfikator "main-nav" */
ul#main-nav {...}

/* Tag ul posiadający identyfikator "main-nav" i klasę "custom-style" */
ul#main-nav.custom-style {...}

/* Tag ul posiadający identyfikator "main-nav" i klasy "custom-style" oraz "big" */
ul#main-nav.custom-style.big {...}

/* Wszystkie tagi "a", których wartosć atrybutu href kończy się na ".pdf" */
a[href$=".pdf"] {...}

#2//css - pseudoselektory

/* Wszystkie elementy a, na któych znajduje się kursor myszki */
a:hover {...}

/* Wszystkie odwiedzone linki */
a:visited {...}

/* Wszystkie tagi <li>, które są pierwszymi potomkami */
li:first-child {...}

/* Wszystkie tagi <p>, które są ostatnimi potomkami */
p:last-child {...}

/* Każdy co drugi (przysty) paragraf w swoim rodzicu */
p:nth-child(2n) {...}

/* Każdy nieprzysty paragraf w swoim rodzicu */
tr:nth-child(odd) {...}

/* Każdy przysty paragraf w swoim rodzicu */
td:nth-child(even) {...}

/* Każdy tag <p>, który nie posiada klasy "hl" */
p:not(.hl) {...}

#2//css - rodzaje selektorów

Rodzaj selektora Opis Przykład
Wszystkie elementy Wybiera wszystkie elementy *
Element Wybiera wszystkie elementy o określonym tagu div
p
Klasa Wybiera wszystkie elementy o określonej wartości atrybutu class .color-primary
.text-highlighted
Identyfikator Wybiera wszystkie element o określonej wartości atrybutu id. #header
#footer
Atrybut Wybiera wszystkie element na podstawie wartości zadanego atrybutu [href]
[rel="nofollow"]
Pseudoselektor Wybiera wszystkie elementy spełniające warunek pseudoselektora :hover
:fist-child
:last-child

Więcej na ten temat na:

#2//css - pseudoElementy

/* Dla wszystkich paragrafów na początku dodaje strzałkę o rozmiarze .6em'a */
p::before {
    content: '->';
    font-size: .6em;
}


/* Dla wszystkich elementów z klasą read-more dodaje na końcu znak wielokropka */
.read-more::after {
    content: '...';
}

Więcej na ten temat na:

#2//css - dziedziczenie

Czym jest dziedziczenie w CSS jak działa?

#2//css - dziedziczenie

#2//css - Kaskadowość, specyfika, dziedziczenie - podsumowanie

#2//css - Jednostki

Jakie znasz jednostki, którymi możemy posługiwać się w CSS?

Czym różnią się od siebie?

Jakie jest ich optymalne przeznaczenie? 

Nazwa Jednostka Najczęstsze zastosowanie
piksele px Definiowanie szerokości, wysokości, marginesów, paddingów, etc.
procenty % Definiowanie szerokości, wysokości, marginesów, paddingów, etc.
emy em Definiowanie Media Queries, wielkości czcionek.
remy rem Definiowanie wielkości czcionek.
procent szerokości okna (viewport) vw Definiowanie szerokości, wysokości, marginesów, paddingów, etc.
procent wysokości okna (viewport) vh Definiowanie szerokości, wysokości, marginesów, paddingów, etc.
procent najmniejszego wymiaru okna (viewport) vmin Definiowanie szerokości, wysokości, marginesów, paddingów, etc.
procent największego wymiaru okna (viewport) vmax Definiowanie szerokości, wysokości, marginesów, paddingów, etc.

W CSS oprócz powyższych można spotkać inne jednostki jak: ex, cm, mm, in, pt, pc - jednak są one bardzo rzadko stosowane. Zobacz więcej na: W3Schools.

#2//CSS - najcześciej wykorzystywane jednostki

#2//css - Jednostki / em i rem

1 em = 100% z wielkości rodzica

1 rem = 100% z wielkości głównego węzła (root)

#2//css - Jednostki / vw i vh

1 vw = 1% szerokości okna (viewport)

1 vh = 1% wysokości okna (viewport)

#2//css - Jednostki / vmin i vmax

1 vmin = 1% najmniejszego wymiaru okna (viewport)

1 vmax = 1% największego wymiaru okna (viewport)

#2//css - RWD

Co oznacza skrót RWD?

Czy każda strona działająca na mobile jest RWD?

Jakie inne rodzaje stron mobilnych (oprócz RWD) znasz?

#2//css - Responsive Web Design

"You put water into a cup it becomes the cup.

You put water into a bottle it becomes the bottle.

You put it into a teapot it becomes the teapot."

Brucee Lee

#2//css - Responsive Web Design

Cechy podstawowe strony responsywnej:

1. Płynny interfejs

2. Elastyczna treść (obrazki, tabelki, etc.)

3. Media Queries

4. Relatywne jednostki interfejsu i typografii

#2//css - Responsive Web Design

Rodzaje stron mobilnych:

1. Fluid

2. Adaptive

3. Responsive

#2//css - Responsive Web Design

Podejścia do kodowania stron responsywnych

Zaczynamy od kodowania wersji mobilnej (najmniejszej), a następnie stopniowo dokodowujemy pozostałe rozmiary.

Zaczynamy od kodowania wersji mobilnej (najmniejszej), a następnie stopniowo dokodowujemy pozostałe rozmiary.

Mobile first

Desktop first

Które podejście jest lepsze?

#3//Javascript

#3//javascript - gdzie to jesT? :)

 

#3//javascript - podstawowe informacje

Gdzie jest uruchamiany?

Czy jest kompilowany czy interpretowany?

Czy JavaScript to to samo co Java?

#3//javascript

  1. Składnia i elementy języka
    1. Podstawowe zasady składni języka
    2. Podstawowe funkcje I/O
    3. Zmienne, stałe i zasada nazewnictwa
    4. Typy danych
    5. Instrukcje warunkowe
    6. Pętle
    7. Funkcje i zasada nazewnictwa
    8. Zakres zmiennych
    9. Typy błędów
    10. Hoisting
  2. Debuggowanie kodu
  3. Przetwarzanie drzewa DOM
  4. Obsługa zdarzeń na stronie

#3//javascript - Składnia

/*
New totaly awsome fraggable game!
*/
var userName = 'ki||3r';
var totalFrags = 89;

// adding frags
function addFrags (frags, fragsToAdd, bonusRatio) {
    return frags + (fragsToAdd * bonusRatio);
}

// listen when button clicked
document.querySelector('#addFrag').onclick = function () {
    var i = 0, l = document.querySelector('.fragged').length;

    for (i=0; i<l; i++) {
        totalFrags = addFrags(i, (Math.random()*10));
    }
};
  1. Wielkość liter - ma znaczenie
  2. Średniki na końcu każdej instrukcji
  3. Nawiasy kołowe, klamrowe
  4. Komentarze jedno i wieloliniowe

Zwróć uwagę na:

Białe znaki nie są interpretowane (ale warto ich używać dla czytelności kodu :))

#3//javascript - Funkcje i/o

alert('Jestem zwykłym okienkiem informacyjnym');

confirm('Czy na pewno chcesz usunąć ten element?');

prompt('Podaj hasło');

console.log('To jest wiadomość, która pojawi się tylko w konsoli przeglądarki');

Najczęstsze zastosowanie:

- wyświetlenie komunikatu użytkownikowi

- pobranie danych od użytkownika

- debuggowanie kodu (wyświetlanie wyników)

#3//javascript - zmienne i stałe

/*
    Poniżej znajdziesz informacje o:
    - zmiennych
    - stałych
*/

// Zmienne
var age = 18;
var lastName = 'Kowalski'; // camelCase - recommended
var first_name = 'Jan'; // underscore - NOT recommended
var number3 = 3;
var number5 = 5;

// Stałe
const DEFAULT = 'template';
const DEFAULT_TEMPLATE = 'template';

// Odnoszenie się do zmiennych i stałych
alert(age);
alert(lastName);
alert(DEFAULT);

Czy deklaracja zmiennej różni się od definicji zmiennej?

Zasady nazewnictwa zmiennych - sprawdź "Pomocnik programisty"

#3//javascript - typy danych

// Liczby
var numberReal = 123;
var numberFloat = 56.78;
var numberNegative = -123;
var total = numberReal + numberFloat + numberNegative;

alert(total);


// Tekst
var textA = 'Welcome';
var textB = 'to the';
var textC = 'real world';
var fullText = textA + ' ' + textB + ' ' + textC;

alert(fullText);

typy skalarne

więcej o typie number

więcej o typie string

Typowanie dynamiczne!

#3//javascript - typy danych

var team = [
    'Adam Nowak',
    'Jan Kowalski',
    'Anna Zaradna',
    'Joanna Radosna',
    'Adrian Lider',
];

alert('W zespole jest ' + team.length + ' członków');

var teamMember = [
    'Adam',
    'Nowak',
    38,
    'Starszy programista',
    [
        'HTML/CSS',
        'JavaScript',
        'PHP'
    ],
];

alert('Imię i nazwisko: ' + teamMember[0] + ' ' + teamMember[1]);

tablice

więcej o tablicach

#3//javascript - typy danych

var teamMember = {
    firstName: 'Adam',
    lastName: 'Nowak',
    age: 38,
    rank: 'Starszy programista',
    technologies: [
        'HTML/CSS',
        'JavaScript',
        'PHP'
    ],
};

alert('Imię i nazwisko: ' + teamMember.firstName + ' ' + teamMember['lastName']);

tablice asocjacyjne / obiekty

więcej o tablicach asocjacyjnych / obiektach

#3//javascript - typy danych

var firstName; // undefined
var role = null; // null
var age = 'test' * 123; // NaN

Typy specjalne

#3//javascript - instr. warunkowe

// przykład 1
if (age < 18) {
    alert('Ups... You are under age');
}

// przykład 2
if ('admin' == userRole) {
    renderAdminView();
} else {
    renderUserView();
}

// przykład 3
if (points > 500) {
    rank = 'EXPERT';
} else if (points > 3500) {
    rank = 'INTERMEDIATE';
} else {
    rank = 'STUDENT';
}

instrukcja warunkowa if .. else

instrukcja warunkowa switch..case

switch (userRole) {
    case 'SUPER_ADMIN':
        template = 'superAdmin.html';
        break;

    case 'ADMIN':
        template = 'admin.html';
        break;

    case 'OLD_USER':
        template = 'oldUser.html';

    case 'USER':
        template = 'user.html';
        break;

    default:
        template = 'notFound.html';      
}

#3//javascript - pętle

// przyklad 1
var policzDo = 10;
var aktualnaWartosc = 0;

while (policzDo >= aktualnaWartosc) {
    alert(aktualnaWartosc);
    aktualnaWartosc++;
}


// przyklad 2
var running = true;

while (running) {
    alert('Program pracuje');

    running = !confirm('Zatrzymać program?');
}

pętle while

// przyklad 1
var policzDo = 10;
var aktualnaWartosc = 0;

do {
    alert(aktualnaWartosc);
    aktualnaWartosc++;
} while (policzDo >= aktualnaWartosc);


// przyklad 2
var running = true;

do {
    alert('Program pracuje');

    running = !confirm('Zatrzymać program?');
} while (running);

pętle do..while

#3//javascript - pętle

// przyklad 1
var policzDo = 10;

for (i = 0; i<=policzDo; i++) {
    alert(i);
}


// przyklad 2 - iteracja po tablicy
var team = [
    'Adam Nowak',
    'Jan Kowalski',
    'Anna Zaradna',
    'Joanna Radosna',
    'Adrian Lider',
];

for(var i=0; i<team.length; i++) {
    alert(team[i]);
}

pętla for

#3//javascript - pętle

// przyklad 1
var teamMember = {
    firstName: 'Adam',
    lastName: 'Nowak',
    age: 38,
    rank: 'Starszy programista',
    technologies: [
        'HTML/CSS',
        'JavaScript',
        'PHP'
    ],
};

for(var key in teamMember) {
    alert(key + ': ' + teamMember[key]); // firstName: Adam | lastName: Nowak | etc.
}

pętla for..in

#3//javascript - funkcje

// przyklad 1
function welcome() {
    alert('Hej witaj!');
}

welcome();


// przyklad 2
function welcomeUser(userName) {
    alert('Hej witaj ' + userName);
}

welcomeUser('Adam Nowak');


// przyklad 3
function getWelcomeText(userName) {
    return 'Hej witaj ' + userName;
}

var welcomeText = getWelcomeText('Jan Kowalski');
alert(welcomeText);

funkcje

#3//javascript - typy błędów

Zobacz także "Pomocnik programisty - Najczęściej spotykane błędy"

SyntaxError

ReferenceError

TypeError

Wystąpił błąd składniowy.

if (radnomNumber == 21 {
    alert('bingo!');
}

Wystąpił błąd odwołania do nieistniejącego obiektu.

var userName = 'John Doe';

alert(userNema);

Wystąpił błąd typu.

var userName = 'John Doe';

userName();

#3//javascript - zakres zmiennych

Czy w JavaScript występuje zmienne mają jakiś konkretny zakres? Jeżeli tak to jaki i na czym polega?

#3//javascript - hoisting

Co pojawi się w konsoli po uruchomieniu tego kodu?

#3//javascript - hoisting

bar();
var bar = function() {};
var someValue = 42;

test();
function test(data) {
    if (false) {
        goo = 1;

    } else {
        var goo = 2;
    }
    for(var i = 0; i < 100; i++) {
        var e = data[i];
    }
}
// deklaracje var zostaną przeniesione tutaj
var bar, someValue; // ustawione domyślnie na 'undefined'

// deklaracje funkcji zostaną również przeniesione na górę
function test(data) {

    // brak blokowego zasięgu spowoduje przeniesienie tutaj
    var goo, i, e; 

    if (false) {
        goo = 1;

    } else {
        goo = 2;
    }
    for(i = 0; i < 100; i++) {
        e = data[i];
    }
}

// powoduje błąd TypeError gdyż bar jest nadal 'undefined'
bar(); 

// przypisania nie zostają zmienione przez 'hoisting'
someValue = 42; 
bar = function() {};

test();

Tworzenie stron WWW: HTML, CSS, JS, PHP (Vavatech)

By Maciej Żukiewicz

Tworzenie stron WWW: HTML, CSS, JS, PHP (Vavatech)

  • 1,083