Answer
t.me/js_testОтвет:
i: 4, element: undefined i: 4, element: undefined i: 4, element: undefined i: 4, element: undefined
Объяснение:
На первой строчке просто объявляется массив из 4 элементов каждый из которых равен своему индексу. Далее идёт цикл и самое важное в нём это то что переменная i объявляется через ключевое слово var. Функция setTimeout создаёт функцию (замыкание), у которой есть доступ к внешней области видимости, представленной в данном случае циклом, в котором используется та самая переменная i. После того, как пройдут 3 секунды, функция выполняется и выводит значение i, которое, после окончания работы цикла, остаётся доступным и равняется 4. Переменная, в ходе работы цикла, последовательно принимает значения 0, 1, 2, 3, причём, последнее значение оказывается сохранённым в ней и после выхода из цикла. В массиве имеется четыре элемента, с индексами от 0 до 3, поэтому, попытавшись обратиться к arr[4], мы и получаем undefined.
Код:
const arr = new Array(4).fill(0).map((_, i) => i);
for (var i = 0; i < arr.length; i++) {
setTimeout(function () {
console.log("i: " + i + ", element: " + arr[i]);
}, 3000);
}