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