Все ваши функции ссылаются на одно и то же значение - i. Что бы все работало в момент определения функции надо сохранять это значение.
function generateArr(count) {
var arr = [];
for (var i = 0; i < count; i++) {
arr[i] = makeFunction(i);
}
return arr;
}
function makeFunction (i) {
return function () {
alert(i);
}
}
приведенный мой код будет работать, так как при передаче переменной в качестве аргумента функции происходит копирования значения (ну... не совсем, там copy-on-write всякие применяются но все же суть та же).
Что бы чуть лучше читалось...
function generateArr() {
var arr;
for(var arr = []; arr.length < 100;arr.push(null));
return arr.map(function (_, i) {
return function () {
alert(i);
}
})
}