Решение
@true_jsОбьяснение:
Все запланированные вызовы setTimeout вызываются после выполнения текущего кода(в нашем случае после выполнения цикла). setTimeout без второго параметра эквивалентен коду
setTimeout(() => console.log('second',i),0)
поэтому сначала в консоль выведется слово second, после него first.
Код для проверки:
let i = 0;
setTimeout(() => console.log('first',i), 100);
setTimeout(() => console.log('second',i));
for(let j = 0; j < 100000000; j++) {
i++;
}