Решил углубиться в замыкания, прочитал статьи, увидел один из примеров использования и теперь есть вопросы.
Приведенный пример был следующий:
// Создает одну функцию, которая печатает квадрат
// указанного числа.
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) и вычислять их каждый раз при обращении к возвращенной функции.
Я понимаю, что это пример, но даже если бы там находились сверх сложные расчеты, то это никак не повлияло бы на производительность.
Так вот:
Что в моих рассуждениях не правильно?
Если все верно, то смысл использовать такую конструкцию?
И я был бы очень рад, если вы приведете мне еще примеры конструктора функций, возможно даже более конкретные, чтобы я мог лучше понять когда и где стоит их использовать.