В цикле переменная передается только по ссылке, поэтому она всегда сохраняет только последнее значение.
Для того, чтобы сохранить значение переменной в цикле, необходимо сделать её локально для функции через замыкание, создав анонимную функцию.
function wrapElements(a) {
var result = [];
for (var i = 0, n = a.length; i < n; i++) {
(function() {
var j = i;
result[i] = function() { return a[j]; };
})();
}
return result;
}
или можно записать короче, передав значение переменной в качестве аргумента
function wrapElements(a) {
var result = [];
for (var i = 0, n = a.length; i < n; i++) {
(function(j) {
result[i] = function() { return a[j]; };
})(i);
}
return result;
}
Комментариев нет:
Отправить комментарий