Вроде разобрался.
только правильно ли я понял
function createCounter() {
var numberOfCalls = 0;
return function() {
return ++numberOfCalls;
}
}
var fn = createCounter();
fn(); //1
fn(); //2
document.write(fn()); //3
1. Всего 1 запуск функции createCounter(), fn = createCounter(); выполняется функция createCounter() возвращает переменной fn
function() {
return ++numberOfCalls;
}
2. scope createCounter() функции не удаляется так так как вложенной может понадобиться ее переменные
3. далее происходит вызов три раза
function() {
return ++numberOfCalls;
}
переменная numberOfCalls; в итоге 3
А во втором примере тот что писал в первом сообщении, после выполнения createCounter естественно все удаляется по завершению каждый раз.
Только теперь непонятно, когда будет удалена переменная numberOfCalls если следовать первому примеру, она так и повиснет в памяти навсегда?