Подтвердить что ты не робот

Каковы преимущества закрытия, и когда они обычно используются?

Я веб-разработчик, но многие люди ищут немного более продвинутые навыки, и понимание закрытия, похоже, находится на переднем крае.

Я получаю весь "контекст выполнения", создающий ссылку на переменную, которая никогда не уничтожается ", но на самом деле, это какая-то реализация частной или статической переменной в JavaScript?

4b9b3361

Ответ 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). Прочтите главу о закрытии, и вы получите гораздо больше глубоких знаний, чем кто-либо может дать вам ответ здесь.