@dony32

Как вывести элементы функции/массива вида a[index]() без переопределения идентификатора?

var a = [1,2,3,77,5,6];
var b = [];

for (var i in a){
    b.push(a[i]);
    a[i] = function() {
        return b[i];
    }
}

for (var i in a){
    console.log(a[i]())
}

При вызове функции на консоль выводится весь список массива, но это из-за переопределения идентификатора. Пожалуйста, подскажите что необходимо сделать, чтобы при console.log(a[3]())(конструкция должна быть именно такого типа) на экран было выведено 77, а не последний элемент в массива?
  • Вопрос задан
  • 2338 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
В замыкании теряется переменная i.

Попробую описать словами.
В Вашем случае, на момент вызова a[3](), переменная i имеет последнее значение из цикла.
Соответственно, я применил IIFE, чтобы сохранить значение i, создав новый контекст.

DEMO
'use strict';

var a = [1,2,3,77,5,6];
var b = [];

for (var i in a) {
    b.push(a[i]);
    
    a[i] = (function(i) {
      return function() {
        return b[i];
      };
    })(i);
}

console.log(a[3]());
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы