003. Deklaracja zmiennych: let, const, var. Jak działa zakres blokowy?

Deklaracje zmiennych w JavaScript:
    let (zmienna mutowalna, blokowy zakres),
    const (stała, blokowy zakres),
    var (zakres funkcyjny, starszy kod)
        - specyficzne tematy na później (hoisting, zakresy i problemy z var)
    domyślnie, czyli bez let, const i var (zakres globalny)

let:
    let x = 10; // Deklaracja i przypisanie
    x = 20;     // Zmiana wartości
    console.log(x); // 20
const:
    const y = 20;
var:
    var z = 30;


Zakres blokowy:
    if (true) {
          let y = 5; // Zmienna y istnieje tylko w tym bloku
          console.log(y); // 5
        }
    console.log(y); // Błąd: y is not defined

Nieoczywiste:
    function test() {
        x = 10; // Brak 'let', 'const' lub 'var' → x staje się globalne!
    }
    test();
    console.log(x); // 10

Podsumowanie – jak działają zakresy w JS:
    Global Scope – dostępny wszędzie w kodzie.
    Function Scope – dostępny tylko w obrębie funkcji.
    Block Scope – dostępny tylko w obrębie if, for, while, lub innych bloków.
    Lexical Scope – zależy od tego, gdzie funkcja została zadeklarowana, a nie wywołana.
    this Scope – zależy od kontekstu wywołania funkcji.