Как ответить
Скорее всего, вы столкнулись с классической проблемой замыканий в JavaScript, когда переменная объявлена через var внутри цикла. Код примерно такой:
for (var i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 100);
}Он выводит пять раз 5, а не 0,1,2,3,4. Причина — var не создаёт блочную область видимости. Переменная i одна на весь цикл и к моменту выполнения колбэков (через 100 мс) уже равна 5. Все замыкания ссылаются на одну и ту же переменную.
Исправить можно двумя способами. Первый — заменить var на let:
for (let i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 100);
}let создаёт новую привязку для каждой итерации, поэтому каждый колбэк запоминает своё значение i. Второй способ — обернуть вызов в IIFE (Immediately Invoked Function Expression) и передать текущее значение как аргумент:
for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(() => console.log(i), 100);
})(i);
}Этот приём создаёт новую область видимости для каждой итерации.
На практике на собеседованиях такое спрашивают, чтобы проверить понимание областей видимости, замыканий и асинхронности. Для junior это база: если не знаешь — гугли «JavaScript closure loop» и запомни решение.