Почему функция не сохраняет предыдущие значения?
Почему задачи из учебников появляются на сервисах решения проблем?
Для сохранения промежуточных значений можно сделать замыкание:var m = [];
for (var j = 0; j < 10; j++) {
  m[j] = (function() {
    return this;
  }).bind(j);
}

alert( m[2]() );