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

SALESmanago ogłasza zmiany na kluczowych stanowiskach: Nowy CEO i CRO
SALESmanago ogłasza zmiany na kluczowych stanowiskach: Nowy CEO i CRO

    SALESmanago, wiodąca platforma CDP i Marketing Automation, z entuzjazmem informuje o istotnych zmianach w swoim zespole kierowniczym. Zmiany mają na celu optymalizację procesu dostarczania rozwiązań dla segmentu średnich przedsiębiorstw.    Po 13 latach kierowania rozwojem firmy w roli Dyrektora Generalnego, współzałożyciel SALESmanago, Grzegorz Błażewicz, obejmuje nieoperacyjną rolę członka Rady Nadzorczej. Będzie tam odpowiadał […]

30 trików i porad dotyczących korzystania z szablonów e-mail, które zostawią konkurencję w tyle.
30 trików i porad dotyczących korzystania z szablonów e-mail, które zostawią konkurencję w tyle.

    Jak prześcignąć konkurencję eCommerce za pomocą czegoś tak prostego jak szablony wiadomości e-mail? Chcemy czy nie, email marketing pozostaje potężnym narzędziem do angażowania klientów, zwiększania sprzedaży i ostatecznie – wyprzedzania konkurencji. Dzięki odpowiednim strategiom i dobrze opracowanym szablonom e-mailowym można skutecznie komunikować się z odbiorcami, budować trwałe relacje i zwiększać zyski.   Poniżej […]

Jak Pitbull West Coast Przełamał Konwencje z SALESmanago
Jak Pitbull West Coast Przełamał Konwencje z SALESmanago

  Pitbull West Coast stanęło przed wyzwaniem – jak wyróżnić się na zatłoczonym rynku i jeszcze bardziej zaangażować swoją społeczność? Odpowiedzią była współpraca z SALESmanago a zwrot z inwestycji (ROI) osiągnął 2947%   Pitbull West Coast to marka odzieżowa, zainspirowana kulturą uliczną i sportami walki. Budując swoją przewagę konkurencyjną i strategie zaangażowania społeczności, firma napotkała […]

Każdy procent ma znaczenie, czyli jak poprawić współczynnik konwersji w Twojej firmie
Każdy procent ma znaczenie, czyli jak poprawić współczynnik konwersji w Twojej firmie

    W coraz bardziej konkurencyjnym świecie eCommerce istnieją pewne nakazy i zakazy, jeśli chodzi o zachęcanie klientów do dokonywania zakupów w Twoim sklepie. Czynność ta nazywana jest konwersją i jest to najważniejszy wskaźnik, który musisz obserwować, planując budowanie swojej firmy i zwiększanie przychodów – w końcu sklep internetowy z milionami odwiedzających, który nie sprzedaje, […]

Kręcisz z AI? Pamiętaj, bezpieczeństwo zawsze na pierwszym miejscu!
Kręcisz z AI? Pamiętaj, bezpieczeństwo zawsze na pierwszym miejscu!

    W świecie, w którym technologia i handel coraz bardziej się przenikają, firmy eCommerce znalazły się na rozdrożu, szukając sposobu na romans z generatywną sztuczną inteligencją. Niedawno opublikowany raport Gartnera, zatytułowany „4 Ways Generative AI Will Impact CISOs and Their Teams”, dostarcza informacji na temat przyszłości cyberbezpieczeństwa w erze AI. Zatem, entuzjaści eCommerce, jeśli […]

Top 10 porażających statystyk dotyczących hipersegmentacji, które musisz znać
Top 10 porażających statystyk dotyczących hipersegmentacji, które musisz znać

    Segmentacja jest znana marketerom już od dłuższego czasu. Jednak w większości przypadków, przypomina raczej nieoszlifowany diament. Wraz z ciągłymi zmianami w technologii wykorzystywanej do zbierania danych, nowymi pokoleniami konsumentów, którzy wymagają wysoce spersonalizowanych treści oraz z ostatnimi zmianami w zachowaniach zakupowych, które spowodował COVID-19, aktualizacja sposobów segmentacji danych stała się kluczowa. Segmentowane kampanie […]

5 super zaawansowanych i turbo-skutecznych segmentacji dla eCommerce
5 super zaawansowanych i turbo-skutecznych segmentacji dla eCommerce

    Hipersegmentacja w eCommerce to trend, który ma szansę zdominować rynek na dłuższy czas. Segmentacja 1:1 pozwala tworzyć na masową skalę oferty dopasowane indywidualnie do każdego odbiorcy. Ma to wpływ na przychody w sklepie i CLV jego klientów. Jak konkretnie można zastosować hiperpersonalizację w różnych typach eCommerce? Oto 5 super zaawansowanych i turbo-skutecznych segmentacji. […]

Zerkamy w przyszłość: analityka predyktywna w SALESmanago
Zerkamy w przyszłość: analityka predyktywna w SALESmanago

    W stale ewoluującym świecie eCommerce, firmy nieustannie poszukują innowacyjnych sposobów na zwiększenie swojej przewagi konkurencyjnej. Trudno przecenić tu rolę analityki predyktywnej. Jej wieloaspektowość ma kluczowe znaczenie dla rozwoju i sukcesu branży.   Szklana kula dla marketingowców   Analityka predyktywna to gałąź analityki danych, która wykorzystuje dane historyczne, algorytmy statystyczne oraz technologię uczenia maszynowego […]

[NAGRANIE WEBINARU] „Przygotuj swój eCommerce na 2024 rok: Doświadczenia z 2023 roku, najważniejsze trendy i innowacje technologiczne dla sklepów internetowych”
[NAGRANIE WEBINARU] „Przygotuj swój eCommerce na 2024 rok: Doświadczenia z 2023 roku, najważniejsze trendy i innowacje technologiczne dla sklepów internetowych”

    Już teraz możesz obejrzeć nagranie naszego ostatniego webinaru, poprowadzonego przez Director Solutions Consulting w SALESmanago, Aleksandra Skałkę.    Kliknij i odkryj:   – Taktyki wdrożone przez najlepiej prosperujące firmy eCommerce w 2023 r. – Najważniejsze trendy w eCommerce na lata 2023/2024: Sztuczna inteligencja, prywatność danych, dane stron zerowych i inne. – Nowe technologie […]