2014-11-23 12 views
6

W połączeniu z zamknięciami Często czytam, że cośzamyka nad coś innego jako środki do wyjaśnienia zamknięć.Co dokładnie oznacza "zamknięcie"?

Teraz nie mam większego problemu ze zrozumieniem zamknięcia, ale "zamknięcie się" wydaje się bardziej fundamentalną koncepcją. W przeciwnym razie nie można by się do tego odnieść, aby wyjaśnić zamknięcia, czyż nie?

Jaka jest dokładna definicja zamknięciu ponad, a co jest coś i coś innego? Skąd pochodzi określenie?

+1

zwykle oznacza to "dodawanie elementów do zestawu, a następnie * trochę więcej *" - część "* więcej więcej" powinna się upewnić, że właściwości zestawu pozostaną ważne - w tym przypadku jest to środowisko, w którym otrzymujesz wartości od - dodajesz te i wszystko, czego możesz potrzebować, używasz w nim lambda - to jest zamknięcie – Carsten

Odpowiedz

8

Rozważmy:

something closes over something else 
|_______| |_________| |____________| 
    |   |    | 
subject  verb  object 

tutaj:

  1. Przedmiotem jest zamknięcie. Zamknięcie jest funkcją.
  2. Zamknięcie “ zamyka się na ” (jak w okólnikach) zestawem jego wolnych zmiennych.
  3. Obiekt jest zbiorem wolnych zmiennych zamknięcia.

Rozważmy prostą funkcję:

function add(x) { 
    return function closure(y) { 
     return x + y; 
    }; 
} 

tutaj:

  1. Funkcja nazwana add ma tylko jedną zmienną o nazwie x, która nie jest wolna zmienna, ponieważ jest zdefiniowana w zakres samej add.
  2. Funkcja nazwana closure dwie zmienne nazwie x i y, z których x jest wolny zmienne, ponieważ jest zdefiniowana w zakresie add (nie closure) i y nie jest wolny zmienny, ponieważ jest zdefiniowana w zakres samej closure.

Stąd, w drugim przypadku funkcja o nazwie closure mówi się “ blisko nad ” zmiennej o nazwie x.

Dlatego:

  1. Funkcja nazwana closure mówi się, że zamknięcie zmiennej o nazwie x.
  2. Zmienna o nazwie x jest uważana za aktualizację funkcji o nazwie closure.

To wszystko.

+2

(1) Wszystko to można powiedzieć w kilku słowach: * "A zamyka się na B" == " B jest swobodną zmienną A ", gdzie zmiennymi swobodnymi są te, które pojawiają się w ciele funkcji, ale nie w jej podpisie. * (2) Odpowiedź nie daje żadnej intuicji co do tego, co wizualizować i dlaczego termin" zamyka się "(i "zamknięcie") zostało wybrane. Czy to ze względu na semantykę (robi coś bliskiego? Czy też coś staje się bliższe?), Czy też zostało wybrane słowo, aby dyskusje brzmiały głębiej i tajemniczo? –

+0

Możesz napisać własną odpowiedź. –

Powiązane problemy