#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
Комментариев нет:
Отправить комментарий