Разбираюсь с областью видимости в JS. Есть такой код:
function createCounter() {
var numberOfCalls = 0;
return function() {
return ++numberOfCalls;
}
}
var fn = createCounter();
console.log(fn()); //1
console.log(fn()); //2
console.log(fn()); //3
Непонятно, где хранится переменная numberOfCalls. Понятно, что в области функции createCounter. Но каким образом область сохраняется после выполнения функции? И где хранится эта область?
Могу ошибаться, но это не очень похоже на замыкание. В зависимсоти от места появления функция может быть:
function createCounter() объявлением функции или
var fn = function createCounter() именованной функцией выражением
Согласно спецификации ECMAScript именованная функция-выражение связывает код с переменной fn а не с функцией createCounter() Формальная разница между безымянной и именованной функцией-выражением состоит в том, что последняя связывает своё имя с локальной переменной внутри функции. Это может быть использовано для написания рекурсивных функций (как в вашем примере).
Продвижение своими сайтами как стратегия роста и независимости