пятница, 21 июня 2013 г.

В цикле переменная передается только по ссылке, поэтому она всегда сохраняет только последнее значение.

В цикле переменная передается только по ссылке, поэтому она всегда сохраняет только последнее значение.
Для того, чтобы сохранить значение переменной в цикле, необходимо сделать её локально для функции через замыкание, создав анонимную функцию.

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;
}

Комментариев нет:

Отправить комментарий