let будет неглобальной, используйте var
var indexNum;
UPD: Я понял, вы конечно тупите, но я наконец понял
как вы тупите, ща попробую объяснить для одаренных:
let indexNum; // нужно получить сюда индекс (тольуо нужно var, а не let)
// вот тут будет немного сложно, включаем мозг...
box.forEach((item, index) => { //мы делаем цикл, и набрасываем слушатели(!)
item.addEventListener('click', () => { //которые могут вообще никогда не случиться, или случиться через час
indexNum = index; //и ТОЛЬКО ТОГДА в indexNum что-то появится, на текущий момент мы только объяснили
//что делать по клику, пока это только команда сделать что-то в случае чего-то, indexNum до тех пор пустой
});
});
// тут indexNum все еще пустой, так как мы не умеем кликать на объекты быстрее чем исполняется код.
mainWrapper.addEventListener('click', () => {
console.log(indexNum); // выведет предыдущее значение индекса при первом клике
// но помним, что клика еще нет!
});
// и тут клика еще нет
for (let index = 0; index < 3; index++) {
console.log(indexNum); // но здесь undefined, а именно здесь индекс и нужен
// не "но", а здесь клика еще нет, а вы пытаетесь получить его значение.
//код выполнился, теперь можете кликать, но теперь ваш фор уже вызываться не будет.
}
Теперь что надо сделать: Вынести ваш код в функцию, и функцию вызывать внутри евента.