016. Co to jest hoisting i jak działa hoisting dla różnych sposobów definiowania funkcji?


Hoisting
    - mechanizm w JavaScript, gdzie deklaracje (nie ich wartości) są przenoszone na początek zakresu, zanim skrypt zostanie wykonany
    - dla funkcji oznacza to, że deklaracje funkcji są dostępne w kodzie, nawet jeśli wywołujesz je przed ich faktycznym zdefiniowaniem

Hoisting zmiennych
        let, const
            zmienne są hoistowane, ale nie są dostępne przed ich inicjalizacją
            Kiedy próbujesz uzyskać dostęp do zmiennej przed jej przypisaniem (czyli przed jej inicjalizacją), JavaScript zgłosi błąd.
            Jest to właśnie mechanizm temporal dead zone.
        var
             Zmienna jest hoistowana i dostępna jako undefined przed jej przypisaniem.