aleksand44
@aleksand44

Почему мы тело цикла оборачиваем в функцию?

Вопрос по задаче. Почему мы тело цикла оборачиваем в функцию и почему без нее ничго не работает?
function replaceImg() {
      var divs = document.querySelectorAll('div.img-replace');
      for (var i = 0; i < divs.length; i++)(function(i) {
        var img = document.createElement('img');
        img.src = divs[i].getAttribute('data-src');
        img.className = 'img-replace';
        img.onload = function() {
          divs[i].parentNode.replaceChild(img, divs[i]);
        }
      }(i))
    }
    setTimeout(replaceImg, 1000); // задержка на 1 сек для демонстрации
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Потому, что onload выполняется асинхронно. На момент её выполнения цикл уже может закончиться и переменная цикла i будет иметь конечное значение, равное divs.length. Оборачивая тело цикла в анонимную функцию, мы создаём замыкание, в котором i неизменна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
inik23
@inik23
типа разработчик
Потому что во время события load цикл может уже закончиться и переменная i будет отличная от той которая нам была нужна.
В данном случаи анонимная функция используется для замыкания и переменная i всегда октуальна
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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