Каковы преимущества закрытия, и когда они обычно используются?
Я веб-разработчик, но многие люди ищут немного более продвинутые навыки, и понимание закрытия, похоже, находится на переднем крае.
Я получаю весь "контекст выполнения", создающий ссылку на переменную, которая никогда не уничтожается ", но на самом деле, это какая-то реализация частной или статической переменной в JavaScript?
Ответы
Ответ 1
Они могут быть хорошими для многих вещей, например, видимость (например, частные члены в традиционном OO).
var count = function(num) {
return function(add) {
add = add || 1;
num += add;
return num;
}
}
Посмотрите на него.
Мой count()
может быть посеян числом. Когда я назначаю переменную возврату, я могу вызвать ее с дополнительным номером, чтобы добавить к внутреннему num
(аргумент изначально, но все еще часть области возвращаемой функции).
Это довольно хороший обзор.
См. также "Переполнение стека"
Ответ 2
Закрытие - это кодовый блок со связанными переменными - он "ловит" свои переменные из своего внешнего контекста, но не зависит от того же контекста.
Практическое использование в javascript при определении событий или обратных вызовов - вы объявляете закрытие, которое должно выполняться нажатием кнопки, например, но это закрытие может ссылаться на переменные, объявленные в области вызова.
jQuery использует замыкания много - Кстати, это хорошая ссылка для понимания закрытий для jQuery: Графическое объяснение закрытия Javascript в контексте jQuery.
Надеюсь, что это поможет.
Ответ 3
Существует много книг JS, но вам действительно нужно взять копию David Flanagan JavaScript: окончательное руководство, если вы действительно хотите научиться это (еще лучший JS-ссылка IMHO). Прочтите главу о закрытии, и вы получите гораздо больше глубоких знаний, чем кто-либо может дать вам ответ здесь.