Показать сообщение отдельно
  #4 (permalink)  
Старый 29.11.2011, 21:25
Интересующийся
Отправить личное сообщение для taha Посмотреть профиль Найти все сообщения от taha
 
Регистрация: 29.11.2011
Сообщений: 22

Сообщение от Главная » Основные элементы языка » Замыкания
При запуске функции все происходит стандартно:

создается [[scope]]
туда записываются локальные переменные
внутренняя функция получает ссылку на [[scope]]

Но в самом конце - внутренняя функция присваивается sourceNode.onclick. Внешняя функция закончила свою работу, но внутренняя - может запуститься когда-нибудь потом.

Интерпретатор javascript не проводит анализ - понадобятся ли внутренней функции переменные из внешней, и какие переменные могут быть нужны.

Вместо этого он просто оставляет весь [[scope]] внешней функции в живых.

Чтобы когда внутренняя функция запустится, если она вдруг не найдет какую-либо переменную в своем [[scope]] - она могла обратиться к [[scope]] внешней функции и нашла бы ее там.
Когда внешняя функция будет вызываться повторно, но с другими аргументами, а [[scope]] будет еще занят внутреней функцией с предыдущего вызова, интерпритатор для этой внешней функции создаст [[scope]] ещё раз?????
Ответить с цитированием