Domknięcia w JavaScript

 



Dla osób rozpoczynających swoją przygodę z językiem JavaScript jedno z trudniejszych zagadnień stanowią domknięcia. W tym artykule postaram się przybliżyć ten ciekawy temat odpowiadając na pytania czym są domknięcia oraz przedstawiając przykłady ich użycia w kodzie.

Definicji domknięć w JavaScript jest wiele. Głównie sprowadzają się do tego, że jest to wydzielony obszar stworzony przez główną funkcję, w której wszystkie zmienne i wewnętrzne funkcje są niezależne od pozostałej części kodu. Zaletą domknięć jest to, że wewnętrzne funkcje mają dostęp zewnętrznych funkcji, natomiast zewnętrzne funkcje nie mają dostępu do wewnętrznych.

Temat z definicji dosyć prosty ale wciąż nie do końca rozumiany.

Najlepiej zobrazuje to prosty przykład:

var myName = ‘Marcin’;
var myAge = 31;
function changeData(){
    var myName = ‘Piotrek’;
    myAge = 32;
}

changeData(); console.log(myName); console.log(myAge);

W powyższym wypadku do konsoli wydrukujemy odpowiednio Marcin i 32. Zmienna myName wewnątrz funkcji changeData jest zmienną do której dostęp ma tylko funkcja myName.

Przeanalizujmy inny przykład:

function buildName(name){
    var greeting = “Hello, ” + name;
    return greeting;
}

Funkcja buildName() deklaruje zmienną lokalną greeting i zwraca ją. Każde wywołanie funkcji tworzy nowy zakres z nową zmienną lokalną i po wykonaniu tej funkcji, nie mamy możliwości ponownego odniesienia się do tego zakresu.

Z pomocą przychodzą nam domknięcia:

function myName(name){ 
    var greeting = "Cześć, " + name; 
    var sayName = function(){
        var welcome = greeting + " Pozdrawiam!";
        console.log(welcome);
    };
    return sayName;
}

var sayMyName = myName("Marcin"); sayMyName(); // Cześć, Marcin Pozdrawiam! sayMyName(); // Cześć, Marcin Pozdrawiam! sayMyName(); // Cześć, Marcin Pozdrawiam!

Funkcja sayName() z tego przykładu jest domknięciem.

Funkcja sayName() ma własny zasięg lokalny (ze zmienną welcome) i ma również dostęp do zakresu funkcji zewnętrznej. W tym przypadku zmienna greeting z funkcji myName().

Normalnie po wykonaniu funkcji zakres jest niszczony i nie ma do niego dostępu. Po wykonaniu funkcji myName() zakres nie zostanie w tym przypadku zniszczony. Funkcja sayMyName() nadal ma do niego dostęp.

Domknięcie służy jako brama między globalnym kontekstem a zewnętrznym zakresem.

Na koniec chciałbym przedstawić przykład bardzo często poruszany na rozmowach kwalifikacyjnych, a mianowicie słynne setTimeout w pętli.

for(var i = 0; i < 5; i++){
    setTimeout(function(){
        console.log(i);
    }, 300);
}

Co spowoduje ten kod? Pierwszą myślą jest wydrukowanie do konsoli cyfr od 0 do 4. Jest to częsty błąd. Kod ten wydrukuje pięć razy piątkę. 

Dlaczego tak się dzieje? Zmienna i jest w przy wypadku zmienną globalną i za każdym razem przekazujemy tą samą wartość zmiennej i.

Jak uzyskać wynik od 0 do 4?

Możemy skorzystać z domknięć, a dokładniej z funkcji IIFE (Immediately-Invoked Function Expression). Przykład ten będzie wyglądał tak:

for (var i = 0; i < 5; i++){
    (function (e){
        setTimeout(function (){
            console.log(e);
        }, 300);
    })(i);
}

Dlaczego teraz osiągniemy zamierzony efekt? Ponieważ funkcja anonimowa ma swój własny zakres i za każdym razem przekazujemy do niej inną wartość zmiennej i.

Przy pierwszym przebiegu pętli, wywołujemy od razu IIFE z parametrem i o aktualnej wartości 0 (wartość z domknięcia). Wywołanie IIFE powoduje ustawienie instrukcji console.log do wykonania z 300ms opóźnieniem z wartością zmiennej e równej 0. Rozpoczyna się nowe przejście przez pętlę. Tym razem zmienna i ma wartość 1 i zostaje przekazana do IIFE, która ustawia wykonanie console.log za 300ms ze zmienną e, o wartości 1 i tak aż do 4.

Podsumowując:

Domknięć możemy użyć w sytuacjach w których:

  1. Chcemy emulować enkapsulację metod
  2. Normalnie użylibyśmy obiektu z wyłącznie jedną metodą

 

 

Marcin Olszewski
Front-End Developer

SALESmanago o platforma Customer Engagement, zaprojektowana dla efektywnych i głodnych sukcesu zespołów marketingowych w eCommerce. Dla marketerów, którzy pragną być zaufanymi partnerami dla swoich CEO. Z naszego rozwiązania korzysta ponad 2000 biznesów online średniej wielkości w 50 krajach oraz liczne globalne marki takie jak Starbucks, Vodafone, Lacoste, New Balance czy Victoria's Secret.

SALESmanago zapewnia maksymalizację wzrostu przychodów oraz poprawy wskaźników KPI dla eCommerce wykorzystując trzy zasady: (1) Customer Intimacy, aby stworzyć autentyczne relacje z klientami w oparciu o dane Zero- i First-Party, (2) Precision Execution, aby zapewnić doskonałe omnichannelowe doświadczenie klienta dzięki hiper-personalizacji oraz (3) Growth Intelligence, która łączy wskazówki opracowane przez specjalistów oraz AI, umożliwiając pragmatyczne i szybkie podejmowanie decyzji w celu maksymalizacji efektu.

Czytaj więcej na: www.salesmanago.pl

Ważna aktualizacja naszych Ogólnych Warunków Umów w związku z unijnym Data Act
Ważna aktualizacja naszych Ogólnych Warunków Umów w związku z unijnym Data Act

    Jako Twój zaufany partner, czujemy się odpowiedzialni za Twoje bezpieczeństwo prawne i rozwój. Nieustannie monitorujemy zmiany w przepisach, dlatego proaktywnie aktualizujemy nasze Ogólne Warunki Umów (OWU), aby zapewnić jej zgodność z nowym unijnym Akt w sprawie danych.   Celem tych aktualizacji jest wzmocnienie Twoich praw, co przekłada się na większą elastyczność i kontrolę […]

Jak zrewolucjonizować handel detaliczny w branży fashion: Historia sukcesu Monnari
Jak zrewolucjonizować handel detaliczny w branży fashion:  Historia sukcesu Monnari

    Monnari, uznana polska marka odzieżowa z 25-letnią tradycją, jest ceniona za swój unikalny design, tworzony specjalnie z myślą o polskim rynku mody kobiecej. Łącząc tradycję z nowoczesnością, Monnari oferuje ponadczasowe, wszechstronne kolekcje, przywiązując szczególną wagę do detali w swoich projektach. By móc odpowiadać na potrzeby konsumentów, Monnari prowadzi rozbudowaną sieć sprzedaży, obejmującą sklepy […]

SALESmanago przejmuje Thulium od Spire Capital Partners, ujednolicając marketing i obsługę klienta, by stworzyć płynne, spersonalizowane doświadczenia zakupowe oparte na AI
SALESmanago przejmuje Thulium od Spire Capital Partners, ujednolicając marketing i obsługę klienta, by stworzyć płynne, spersonalizowane doświadczenia zakupowe oparte na AI

    SALESmanago wyznacza nowy standard angażowania klientów, stając się pierwszą platformą, która w pełni integruje pozyskiwanie klientów, zarządzanie ich danymi, automatyzację marketingu, komunikację wielokanałową i obsługę klienta. Europejskie marki eCommerce średniej wielkości mogą teraz zwiększać swoje przychody, monetyzując spersonalizowane interakcje na każdym etapie ścieżki zakupowej.   Kraków, Polska, 24 lipca 2025 – SALESmanago, wiodąca […]

SALESmanago uruchamia platformę marketingową działającą w czasie rzeczywistym, aby skrócić czas tworzenia kampanii z godzin do minut
SALESmanago uruchamia platformę marketingową działającą  w czasie rzeczywistym, aby skrócić czas tworzenia kampanii  z godzin do minut

    Inteligentniejsze i szybsze narzędzia komunikacyjne eliminują bariery w realizacji działań, umożliwiają marketing konwersacyjny i zapewniają natychmiastową personalizację we wszystkich kanałach kontaktu z klientem.   Kraków, Polska; 15 lipca 2025 – SALESmanago, wiodąca europejska Platforma Customer Engagement, ogłosiła serię strategicznych zmian produktowych skoncentrowanych na wsparciu marketerów w szybszej, efektywniejszej i pewniejszej pracy.   Celem […]

TikTok commerce, dark social i zmierzch SEO: badanie SALESmanago ujawnia, co spędza sen z powiek marketerom z sektora detalicznego
TikTok commerce, dark social i zmierzch SEO: badanie SALESmanago ujawnia, co spędza sen z powiek marketerom z sektora detalicznego

    Badanie przeprowadzone wśród europejskich marek e-commerce wskazuje na wyzwania technologiczne wynikające z ewolucji oczekiwań     i zachowań konsumentów.   Kraków, 20 maja 2025 r.: Nadchodzi kres SEO w tradycyjnej odsłonie – tak wynika z najnowszego badania przeprowadzonego przez SALESmanago, czołową europejską platformę zarządzania zaangażowaniem klientów. Aż 73% marketerów w sektorze e-commerce i […]

Ambitniejsze cele, mniejsze budżety: aż 73% marketerów, mimo korzystania z AI, ma problem z osiągnięciem założonych na ten rok celów przy ograniczonych zasobach
Ambitniejsze cele, mniejsze budżety: aż 73% marketerów, mimo korzystania z AI, ma problem z osiągnięciem założonych na ten rok celów przy ograniczonych zasobach

    Z ostatniego badania SALESmanago wynika, że dziś sukces w marketingu warunkuje sztuczna inteligencja – mimo to problemy narastają z uwagi na cięcia kadrowe i coraz większą presję   Kraków, 3 kwietnia 2025 r. Z ostatniego badania SALESmanago, czołowej europejskiej platformy zarządzania zaangażowaniem klientów obsługującej ponad 3 tys. klientów, wynika, że marketerom w Europie […]

AI Sidekick – nowe inteligentne narzędzie SALESmanago mierzy i zwiększa wydajność w eCommerce
AI Sidekick – nowe inteligentne narzędzie SALESmanago mierzy i zwiększa wydajność w eCommerce

    AI Sidekick usprawnia marketing e-commerce, zapewniając inteligentną automatyzację, większe zaangażowanie klientów i dużą elastyczność   Kraków, 12 marca 2025 r.  SALESmanago – czołowa europejska platforma zarządzania zaangażowaniem klientów obsługująca ponad 3 tys. firm – poinformowała dziś o rozszerzeniu funkcji AI Sidekick – spersonalizowanej warstwy AI zaprojektowanej z myślą o większej wydajności w e-commerce, […]

SALESmanago napędza wzrost marki z tradycjami
SALESmanago napędza wzrost marki z tradycjami

    O kliencie: Jubiler Schubert – Tradycja i Nowoczesność   Jubiler Schubert to marka o bogatej historii sięgającej XIX-wiecznego Wiednia. Założona przez Sykstusa Schuberta pracownia złotnicza dała początek rodzinnej tradycji, kontynuowanej dziś przez Sebastiana Schuberta. Firma, specjalizująca się w wytwarzaniu i sprzedaży wysokiej jakości biżuterii, stała się jedną z największych sieci jubilerskich w Polsce. […]

Skuteczna personalizacja SALESmanago zwiększa przychody z e-commerce
Skuteczna personalizacja SALESmanago zwiększa przychody z e-commerce

    Nowe inteligentne narzędzie powstało z potrzeby większej personalizacji, dzięki której zespoły e-commerce mogłyby tworzyć indywidualne doświadczenia klientów Jak pokazują wyniki z okresu wyprzedaży Black Friday, stosowanie technik personalizacji przyniosło sprzedawcom 19% więcej interakcji   Kraków, 15 stycznia 2025 r.:  SALESmanago – czołowa europejska platforma zarządzania zaangażowaniem klientów obsługująca ponad 3 tys. klientów – […]

SALESmanago nawiązuje współpracę z PrestaShop, aby rozszerzyć swoją ofertę inteligentnych rozwiązań na sektor eCommerce w Europie
SALESmanago nawiązuje współpracę z PrestaShop, aby rozszerzyć swoją ofertę inteligentnych rozwiązań na sektor eCommerce w Europie

    Współpraca stanowi kolejny krok – po niedawnym przejęciu Leadoo – w rozwoju platformy zarządzania zaangażowaniem klientów w Europie.   Kraków, 18 grudnia 2024 r.: SALESmanago, lider segmentu SaaS obsługujący ponad 3 tys. klientów, nawiązał strategiczną współpracę z PrestaShop – jedną z najpopularniejszych platform eCommerce w Europie, która wspiera ponad 300 tys. firm w […]