Czym są domknięcia w JavaScript

Domknięcie jest to zasięg stworzony przez funkcję wraz z otaczającym ją środowiskiem czyli zmiennymi oraz innymi funkcjami, które oddzielone są razem od reszty kodu.

let b = 99; // zmienna globalna b
function foo() {
    let b = 10; // osobna zmienna lokalna b
    console.log("b:" + b); // odwołanie się do b lokalnego
}      

foo(); // b: 10

Funkcja foo ma swoje własne środowisko z zmienną b, która jest oddzielona od globalnej przestrzeni nazw, nazwa zmiennej się pokrywa więc wybrana zostanie lokalna zmienna o wartości 10 w console.log()

Funkcja foo jest domknięciem, bo tworzy oddzielne środowisko dla zawartych w niej zmiennych oraz wewnętrznych funkcji.

Kolejny przykład:

let b = 99;

function foo() {
    let b = 10;
    function bar() {
        let a = 5; 
        console.log("a:" + a, "b:" + b);
    }
    return bar; // zwraca ciało funkcji, 
}               // nie wywołuje jej

// w show jest zwrócona referencja do bar
const show = foo();
// funkcję wywołujemy z ()
show(); // a:5 b:10 - wartość b jest znana z poprzedniego wywołania foo!
show(); // a:5 b:10 - nadal jest znana wartość b

Po zakończeniu działania foo() z lokalną zmienną b zwrócona została funkcja bar i przypisana do show. Wywołanie show ukazuje, że nadal funkcja ta ma dostęp do zmiennej b z zakończonej funkcji foo.

To są domknięcia, gdzie JavaScript zachowuje referencję do zmiennych/środowiska, które otaczały funkcję bar. Pamiętajmy że domknięcia czyli Scopes można obejrzeć korzystając z funkcji console.dir() co może pomóc w zrozumieniu tematu.

KW

Scroll to Top