Вопрос проверяет понимание областей видимости var и замыканий.
var имеет функциональную область видимости, а не блочную. В цикле все итерации используют одну и ту же переменную, поэтому в замыканиях получается последнее значение.
Пример проблемы:
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000); // 3, 3, 3
}Решение 1: let (блочная область видимости)
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000); // 0, 1, 2
}Решение 2: Замыкание
for (var i = 0; i < 3; i++) {
(function(j) {
setTimeout(() => console.log(j), 1000); // 0, 1, 2
})(i);
}Вывод:let и const решают проблему, так как имеют блочную область видимости.