Co to są zamknięcia i wezwania zwrotne?

Co to są zamknięcia i wywołania zwrotne w JavaScript? Jeszcze nie znalazłem dobrego wyjaśnienia.

Author: TylerH, 2010-01-15

1 answers

Zamknięcia były już dobrze obsługiwane w Stackoverflow oto tylko wybór:-

Jak działa zamknięcie javascript?
co dokładnie oznacza "zamknięcie" w JavaScript?
czy możesz powiedzieć, że jest to właściwy przykład zamknięcia Javascript.. Gdzie musimy rozważyć uniknięcie zamknięcia??
JavaScript zakres i zamknięcie
Javascript Closures and 'this' context
JavaScript - Jak dowiedzieć się o użyciu" zamknięć"?

Wywołania zwrotne są prostszym pojęciem. Wywołanie zwrotne jest w zasadzie tam, gdzie funkcja przyjmuje inną funkcję jako parametr. W pewnym momencie podczas wykonywania wywołana funkcja wykona funkcję przekazaną jako parametr, jest to wywołanie zwrotne . Dość często callback rzeczywiście dzieje się jako zdarzenie asynchroniczne, w którym to przypadku wywołana funkcja może powrócić bez wykonywania wywołania zwrotnego, które mogą się zdarzyć później. Oto wspólny (oparty na przeglądarce) przykład:-

 function fn() { alert("Hello, World"); }
 window.setTimeout(fn, 5000);

Tutaj Funkcja {[2] } jest przekazywana jako wywołanie zwrotne do funkcji setTimeout. Set timeout zwraca natychmiast, jednak 5 sekund później funkcja przekazywana jako wywołanie zwrotne jest wykonywana.

Zamknięcia i wywołania

Dość często powodem tworzenia zamknięć (przypadkowo, przypadkowo lub celowo) jest potrzeba utworzenia połączenia zwrotnego. Na przykład: -

 function AlertThisLater(message, timeout)
 {
     function fn() { alert(message); }
     window.setTimeout(fn, timeout);
 }

 AlertThisLater("Hello, World!", 5000);

(Proszę przeczytaj niektóre z powiązanych postów, aby uchwycić zamknięcia)

Tworzy się zamknięcie zawierające w części parametr message, fn jest wykonywane dość długo po powrocie wywołania do AlertThisLater, jednak fn nadal ma dostęp do oryginalnej zawartości message.

 37
Author: AnthonyWJones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:18