Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2015, 16:27
Интересующийся
Отправить личное сообщение для elshaarawy Посмотреть профиль Найти все сообщения от elshaarawy
 
Регистрация: 16.03.2015
Сообщений: 11

Как понять "замыкание"?
Смотрю видеоуроки по Hexlet, и там тема замыкание. Я не совсем чего-т понял. Почитал в инете еще. Как понял, это когда одна функция внутри другой =) На этом все, остальное я понял кусками.
Кому не трудно, объясните на простом примере, на пальцах, что же это такое и самое главное для чего это надо и когда использовать?
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2015, 16:36
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://learn.javascript.ru/#book-toc-638
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2015, 18:31
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Учебник не читаем с телефона. Автоматически запускаются все примеры на странице и пробился через алерты невозможно.

Что бы понять замыкания нужно сначала разобраться с механизмом объявления переменных и областью видимости сначало почитать про scope.
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2015, 19:41
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

elshaarawy,
Суть замыкания понять легко: это функция, замкнутая на контекст. Само по себе слово замыкание сейчас употербляется почти исключительно в смысле лексического замыкания. Тут для понимания основная трудность заключается в том, что его создание происходит неявно. Причем контекст этот недоступен извне, только изнутри тела ф-ции. Чтобы лучше понять, что происходит на самом деле, приведу тебе пример некоторой имитации замыкания.
namespace={a: 1}
func=function(){alert(this.a)}
closure=function(){return func.call(namespace)}

closure()
// ::: 1

Это по сути то же замыкание -- вид сбоку. Разница в том, что имена окружения нам доступны из-вне. Тот же bind, например, делает примерно то же самое.

Сейчас идет оголтелый пиар замыканий, некоторые кукарекают, что это мощнейшее средство, величайшая абстракция, мистерия и тд. Не ведись на эту парашу. Ничего с ними нельзя сделать такого, чего нельзя сделать без них, кроме инкапсуляции (в плохим, "жабском" смысле). Единственный реальный профит, который от их использования может быть -- это то, что такой код легче оптимизируется, в теории, возможно, он будет быстрей работать, но это все вилами на воде писано, к тому же, есть обратная сторона -- замкания засирают память.
Используй их, когда это удобно, например, для пробрасывания контекста иногда годится, в тот же setTimeout из цикла, специально их втыкать куда не попадя -- не нужно, лучше наоборот -- избегать.

Последний раз редактировалось theKingOfJava, 07.04.2015 в 20:01.
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2015, 20:49
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от MallSerg
Учебник не читаем с телефона
напиши от этом создателю учебника
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 07.04.2015, 21:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

учебник то новый
и по теме обясняшка с http://ru.stackoverflow.com/

Как работают замыкания в JavaScript
Ответить с цитированием
  #7 (permalink)  
Старый 07.04.2015, 21:40
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

В сети так много различных объяснений, что уже просто не хочется заново набирать ответ в 100500й раз. Пожалуйста, поищи тщательнее.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мотоциклисты есть? l-liava-l Оффтопик 13 04.07.2014 13:35
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
еще и еще. как понять avrudoi Элементы интерфейса 2 15.01.2014 17:40
не могу понять как работает him Общие вопросы Javascript 1 05.01.2014 00:20
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48