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 to 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

Transformacja cyfrowa iSpot: Jak polski Apple Premium Partner osiągnął 70-krotny zwrot z inwestycji (ROI) dzięki SALESmanago
Transformacja cyfrowa iSpot: Jak polski Apple Premium Partner osiągnął 70-krotny zwrot z inwestycji (ROI) dzięki SALESmanago

    Kiedy wiodący polski Apple Premium Partner postanowił przekształcić swoje podejście do klienta z transakcyjnego na relacyjne, zwrócił się z tym zadaniem do SALESmanago. Wyniki? Oszałamiający 70-krotny zwrot z inwestycji, wskaźniki zaangażowania w kampaniach e-mailowych wyższe o 1334% od standardów branżowych oraz płynne doświadczenie omnichannel, które doskonale uzupełnia ofertę produktów premium. Oto, jak iSpot […]

Marketerzy ufają swoim narzędziom MarTech, ale nie wykorzystują ich kluczowych funkcji – wynika z badania
Marketerzy ufają swoim narzędziom MarTech, ale nie wykorzystują ich kluczowych funkcji – wynika z badania

    Nowe badania przeprowadzone przez SALESmanago pokazują, że prawie wszyscy przebadani (99%) marketerzy twierdzą, że w swoich technologiach marketingowych posiadają aktywne funkcje, z których nie korzystają, a większość (62%) przyznaje, że wykorzystuje tylko 50-75% dostępnych możliwości Prawie połowa marketerów (47%) uważa, że ledwo radzą sobie z nakładem pracy przez ograniczenia czasowe i wydajnościowe, podczas […]

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. […]