Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.01.2015, 21:33
Аспирант
Отправить личное сообщение для kilohertz_. Посмотреть профиль Найти все сообщения от kilohertz_.
 
Регистрация: 07.12.2014
Сообщений: 31

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

Пример из статьи:
function createCounter() {
   var numberOfCalls = 0;
   return function() {
      return ++numberOfCalls;
   }
}
var fn = createCounter();
fn(); //1
fn(); //2
fn(); //3
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2015, 23:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Как не меняется? Меняется, ты же сам написал - 1, 2, 3..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 25.01.2015, 03:41
Аспирант
Отправить личное сообщение для kilohertz_. Посмотреть профиль Найти все сообщения от kilohertz_.
 
Регистрация: 07.12.2014
Сообщений: 31

Нет, ты не правильно понял!
Я не понимаю, почему меняется! Ведь она же обнуляется при каждом вызове функции!
А пример не мой, со статьи
Ответить с цитированием
  #4 (permalink)  
Старый 25.01.2015, 09:42
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Я не понимаю, почему меняется! Ведь она же обнуляется при каждом вызове функции!
Цитата:
function() {
 return ++numberOfCalls;
}
Где ты тут нашел обнуление?
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2015, 14:38
Новичок на форуме
Посмотреть профиль Найти все сообщения от bindquest
 
Регистрация: 25.01.2015
Сообщений: 2

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

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенные функции, плохо или не очень? Bebarr Swallow Общие вопросы Javascript 2 25.06.2012 12:31
Вложенные функции ПХП kilogram Серверные языки и технологии 11 03.04.2012 19:11
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
PHP ООП и вложенные функции Tim Серверные языки и технологии 6 15.06.2009 08:01