Показать сообщение отдельно
  #1 (permalink)  
Старый 04.02.2014, 22:19
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Помогите разобраться с замыканиями?
Решил углубиться в замыкания, прочитал статьи, увидел один из примеров использования и теперь есть вопросы.
Приведенный пример был следующий:
// Создает одну функцию, которая печатает квадрат 
// указанного числа.
function createFunc(n) {
  return function() { alert(n*n) };
}
// Создает number таких функций и возвращает их массив.
function create(number) {
  var arr = [];
  for (var i=1; i<number; i++) {
    arr[i] = createFunc(i);
  }
  return arr;
}
// Теперь создаем все функции...
var arr = create(100);
// ...и запускаем четвертую по счету.
arr[4]();


Мои рассуждения(не обязательно правильные):
Функция createFunc создает [[scope]] со свойством n, а функция которую он возвращает получает ссылку на него.
То есть в итоге создается 100 объектов [[scope]], под каждый из которых выделена память.
Вроде ничего не должно кэшироваться т.к. в итоге каждая созданная функция будет иметь выражение
типа alert([[scope]].n*[[scope]].n) и вычислять их каждый раз при обращении к возвращенной функции.
Я понимаю, что это пример, но даже если бы там находились сверх сложные расчеты, то это никак не повлияло бы на производительность.

Так вот:
Что в моих рассуждениях не правильно?
Если все верно, то смысл использовать такую конструкцию?
И я был бы очень рад, если вы приведете мне еще примеры конструктора функций, возможно даже более конкретные, чтобы я мог лучше понять когда и где стоит их использовать.
Ответить с цитированием