Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

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

#javascript #замыкания


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



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




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


Ответы

Ответ 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

Комментариев нет:

Отправить комментарий