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

Вопрос по замыканиям
Добрый вечер друзья, возник вопрос, скорей даже не вопрос, а полная неразбериха по теме замыканий (недавно в JS). Что бы без длинных предысторий, сразу покажу код (взял из Википедии):
function createCounter() {
    var numberOfCalls = 0;
    return function() {
        return ++numberOfCalls;
    }
}
var fn = createCounter();
fn(); //1
fn(); //2
fn(); //3

Я понимаю, что этот код делает, но абсолютно не понимаю каким образом.
Почему при вызове функции createCounter() не обнуляется переменная numberOfCalls?
Зачем нужно копировать ссылку на функцию в переменную fn, почему ее нельзя вызвать напрямую?
Сам по себе, этот код меня не волнует, но это самый простой пример замыкания, который я, к сожалению, не могу понять. Я бы был очень благодарен, если бы вы подробно объяснили мне ситуацию, как это все считывает интерпретатор.
Ответить с цитированием