Zamknięcia w JavaScript

Mar 07 2023
W JavaScript funkcja jest blokiem kodu, który jest przeznaczony do wykonania określonego zadania. Uruchamia się, gdy go wywołujesz.
Zamknięcia w JavaScript

W JavaScript funkcja jest blokiem kodu, który jest przeznaczony do wykonania określonego zadania. Uruchamia się, gdy go wywołujesz.

Na przykład:

function myFunction(message){
  console.log(message)
}

myFunction("Hello there!!")

myFunction("Welcome, boss")

Ale co, jeśli chcemy wiedzieć, co się stało przy pierwszej lub poprzedniej egzekucji. Właśnie tam pojawiają się zamknięcia.

Co to jest zamknięcia?

Mówiąc prościej, gdy funkcja zwraca inną funkcję, która ma dostęp do swojego zewnętrznego zakresu funkcji, nazywa się to domknięciami w JavaScript.

Na przykład:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}


const result = outer()

function inner (){
  counter++;
  return counter;
}

W jakiś sposób JavaScript zapamiętuje poprzednią counterwartość i wykonuje operację matematyczną.
Możesz zapytać, jak Js to robi?

Gdy funkcja zwraca funkcję, nie zwraca tylko samej funkcji, ale także zakres leksykalny tej funkcji. Wszystkie te zmienne, dane, które są powiązane z tą zwróconą funkcją jako ukryta właściwość wraz z tą zwróconą funkcją. Ta ukryta właściwość nazywana jest równieżBackpack

Ten plecak ma wiele nazw:

  • Zamknięte w „zmiennym środowisku” (COVE)
  • Trwałe dane odniesienia do zakresu leksykalnego (PLSRD)
  • Plecak
  • Zamknięcie

Spójrzmy na inny przykład:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}

const result = outer()

result() // 1
result() // 2

const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2


Dlaczego zamknięcia:

  • Pomaga nam tworzyć funkcję pomocniczą, która umożliwia zaawansowane funkcje, takie jak raz i zapamiętywanie.
  • Pomaga nam w tworzeniu Iteratorów i Generatorów z wykorzystaniem zakresu leksykalnego i domknięć.
  • Wiele wzorców projektowych JavaScript, w tym wzorzec modułu, wykorzystuje zamknięcie, zachowując stan aplikacji bez zanieczyszczania globalnej przestrzeni nazw.
  • Wywołania zwrotne i obietnice opierają się na domknięciach, aby zachować stan w asynchronicznym świecie JavaScript.