Вот код:
// Создать объект пространства имен.
// Для краткости проверка ошибок отсутствует.
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 (действительно хорошая книга, на мой взгляд), подскажите где здесь само замыкание? Ведь для него нужно, что бы на внутреннюю функцию была ссылка из глобальной области видимости(или из другой цепочки видимостей), а не из объекта вызова объемлющей (внешней) функции! А в примере из внутренней функции делается метод локального объекта как раз внешней функции. Где замыкание?