Замыкание в js (простой пример)

95
05 мая 2021, 23:30

Имеется следующий код:

function foo() { 
    var count = 0; 
    return function foo2() { 
        count++; 
        console.log(count); 
    } 
} 
var d = foo(); 
d(); 
d(); 
d();

Пример простого замыкания. Вопрос: почему, для того, чтобы работал код нужно создавать переменную и помещать туда вызов функции? Почему если вызвать функции напрямую foo(); (без переменной), то не работает?

Answer 1

Просто, не происходит вызов функции... Без переменной правильной будет такая конструкция

function foo() {
    var count = 0;
    return function foo2() {
        count++;
        console.log(count);
    }
}
foo()() // 1
foo()() // 1
foo()() // 1

Проблема в том, что каждый вызов функции foo создает новую переменную count. Если count будет объявлена вне функции или частью её прототипа, то инкремент будет происходить корректно

function foo() {
    foo.prototype.count=foo.prototype.count|0;
    return function foo2() {
        foo.prototype.count++;
        console.log(foo.prototype.count);
    }
}
foo()() // 1
foo()() // 2
foo()() // 3
READ ALSO
Canvas, загрузка картинок

Canvas, загрузка картинок

появилась задачка по работе с Canvas, особо с ним никогда не работал, но сразу столкнулся с моментом который мне не особо нравится

91
Почему выдает ошибку в консоли? js

Почему выдает ошибку в консоли? js

Столкнулся с ошибкой в консоли:

111
Экранирование с помощью JS RegEx

Экранирование с помощью JS RegEx

Необходимо экранировать все символы ' (скобка) методом RegEx в строке ( \' ''' ' ' ), нужно учесть то что в строке возможно уже экранированный символ

124
Как проверить правильно ли работают скрипты в inapp браузере instagram

Как проверить правильно ли работают скрипты в inapp браузере instagram

Хотелось бы проверить работу скриптов сайта в in-app браузере instagram, может есть какая нибудь тестовая площадка?

84