Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вложенные функции (https://javascript.ru/forum/misc/53203-vlozhennye-funkcii.html)

kilohertz_. 24.01.2015 21:33

Вложенные функции
 
Объясните, почему numberOfCalls не меняется во вложенной функции? Я ничего не понял в "замыканиях" на данном примере

Пример из статьи:
function createCounter() {
   var numberOfCalls = 0;
   return function() {
      return ++numberOfCalls;
   }
}
var fn = createCounter();
fn(); //1
fn(); //2
fn(); //3

danik.js 24.01.2015 23:24

Как не меняется? Меняется, ты же сам написал - 1, 2, 3..

kilohertz_. 25.01.2015 03:41

Нет, ты не правильно понял!
Я не понимаю, почему меняется! Ведь она же обнуляется при каждом вызове функции!
А пример не мой, со статьи

Erolast 25.01.2015 09:42

Цитата:

Я не понимаю, почему меняется! Ведь она же обнуляется при каждом вызове функции!
Цитата:

function() {
 return ++numberOfCalls;
}

Где ты тут нашел обнуление?

bindquest 25.01.2015 14:38

Цитата:

Сообщение от kilohertz_.
Я не понимаю, почему меняется! Ведь она же обнуляется при каждом вызове функции!

Ты должен уяснить разницу, между простым вызовом ф-ции и замыканием. В замыкании создается контекст, это функция с состоянием. В твоем случае, инструкция var numberOfCalls = 0 не отрабатывает каждый раз при вызове твоей функции. Этот код аналогичен такому.
o={
 numberOfCalls: 0,
 counter: function(){return this.numberOfCalls++}
}

alert([o.counter(), o.counter(), o.counter()])

Замыкание -- это не просто ф-ция, это ф-ция+окружение


Часовой пояс GMT +3, время: 22:52.