Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2011, 09:21
Кандидат Javascript-наук
Отправить личное сообщение для Иваннн Посмотреть профиль Найти все сообщения от Иваннн
 
Регистрация: 31.05.2010
Сообщений: 106

Про замыкания
Вот код:
// Создать объект пространства имен.
// Для краткости проверка ошибок отсутствует.
var com;
if (!com) com = {};
if (!com.davidflanagan) com.davidflanagan = {};
com.davidflanagan.Class = {};
// Здесь ничего не создается непосредственно в пространстве имен.
// Вместо этого объявляется и вызывается анонимная функция, которая
// создает замыкание, используемое как частное пространство имен.
// Данная функция экспортирует общедоступные символы из замыкания
// в объект com.davidflanagan.Class
// Обратите внимание: функция не имеет имени, поэтому не создается
// никаких глобальных символов.
(function( ) { // Начало определения анонимной функции
// Вложенные функции создают символы внутри замыкания
function define(data) { counter++; /* тело функции */ }
function provides(o, c) { /* тело функции */ }
// Локальные переменные – это символы, расположенные внутри замыкания.
// Этот символ останется частным и будет доступен только внутри замыкания
var counter = 0;
// Эта функция может обращаться к переменной с помощью простого имени
// и не пользоваться полным именем, определяющим пространство имен
function getCounter( ) { return counter; }
// Теперь, когда внутри замыкания были определены свойства,
// которые должны оставаться частными, можно экспортировать символы,
// доступные во внешнем пространстве имен
var ns = com.davidflanagan.Class;
ns.define = define;
ns.provides = provides;

ns.getCounter = getCounter;
})( ); // Конец определения анонимной функции и ее вызов

взят из популярной книги по javascript (действительно хорошая книга, на мой взгляд), подскажите где здесь само замыкание? Ведь для него нужно, что бы на внутреннюю функцию была ссылка из глобальной области видимости(или из другой цепочки видимостей), а не из объекта вызова объемлющей (внешней) функции! А в примере из внутренней функции делается метод локального объекта как раз внешней функции. Где замыкание?
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2011, 09:27
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Почитай тут
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2011, 11:06
Кандидат Javascript-наук
Отправить личное сообщение для Иваннн Посмотреть профиль Найти все сообщения от Иваннн
 
Регистрация: 31.05.2010
Сообщений: 106

Сообщение от Skipp Посмотреть сообщение
Почитай тут
Как раз тут и читал. Где в приведенном мной примере ссылка на внутреннюю функцию снаружи внешеней?
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2011, 11:12
Кандидат Javascript-наук
Отправить личное сообщение для Иваннн Посмотреть профиль Найти все сообщения от Иваннн
 
Регистрация: 31.05.2010
Сообщений: 106

Все, разобрался
внутри функции объявляется переменная ns, но так как она является ссылкой, то назначение метода происходит непосредстванно у объекта на который она ссылается, который и является глобальным!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что скажете про блондинку (которая ru)? Jurasmi Оффтопик 8 01.01.2011 15:14
Про Вконтакте способы оплаты mycoding Оффтопик 0 21.12.2010 21:57
Фреймы, информация про родительский документ Slawaq Серверные языки и технологии 6 05.09.2010 12:53
Подкажите про версии Firefox Beck Общие вопросы Javascript 8 13.05.2010 15:24
Что можно и нужно прочитать про валидацию? Amateur Общие вопросы Javascript 5 09.03.2010 11:41