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