Где и как хранятся переменные из области видимости функции

374
30 июля 2017, 10:46

Разбираюсь с областью видимости в 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. Но каким образом область сохраняется после выполнения функции? И где хранится эта область?

Answer 1

Могу ошибаться, но это не очень похоже на замыкание. В зависимсоти от места появления функция может быть:

function createCounter() объявлением функции или

var fn = function createCounter() именованной функцией выражением

Согласно спецификации ECMAScript именованная функция-выражение связывает код с переменной fn а не с функцией createCounter() Формальная разница между безымянной и именованной функцией-выражением состоит в том, что последняя связывает своё имя с локальной переменной внутри функции. Это может быть использовано для написания рекурсивных функций (как в вашем примере).

READ ALSO
Не видна переменная в функции

Не видна переменная в функции

Почему внутри функции ShowSlide не виден массив slides? При первом вызове консоллог размер выводится(выводит img)

299
phantomjs page evaluate callback

phantomjs page evaluate callback

Есть функция на phantomJS:

310
не уставливается gulp-sass

не уставливается gulp-sass

Добрый день Проблема: не могу установить gulp-sass в готовой сборке gulpгуглил, пробовал разные варианты

502
Платежные системы на сайте

Платежные системы на сайте

Ради интереса хочю спросить а какие платежные системы используют порносайты? Наколько я знаю в се сайты подобной тематики действуют не законно,...

314