Почему var отрабатывает после того, как отработал цикл for?

В JavaScript объявление переменных с использованием ключевого слова var происходит на уровне функции или глобальной области видимости, независимо от того, где внутри функции объявлена переменная.

При использовании конструкции for, переменная, объявленная с использованием var, будет создана только один раз перед началом цикла и будет видима на протяжении всего блока цикла. Но ее значение не обновляется на каждой итерации цикла, поэтому последнее присвоенное значение сохраняется после выполнения цикла.

Рассмотрим следующий пример:

for (var i = 0; i < 5; i++) {
    console.log(i);
}

console.log(i);

В этом примере, после выполнения цикла for, переменная i будет иметь значение 5, так как цикл выполнился 5 раз (от 0 до 4). После цикла for i всё еще доступна и ее значение будет 5.

Такое поведение связано с тем, что объявление переменной var не ограничивается блоком кода, в котором находится. Поэтому переменная i в примере видна вне цикла и ее значение сохраняется.

Если вы хотите, чтобы переменная была видима только внутри блока цикла for, вам следует использовать let или const. Рассмотрим пример:

for (let i = 0; i < 5; i++) {
    console.log(i);
}

console.log(i);

В этом случае будет возникать ошибка ReferenceError, потому что переменная i объявлена с использованием let и видна только в блоке цикла. Поэтому после блока цикла for, переменная i недоступна.

Итак, чтобы подытожить, использование ключевого слова var в JavaScript позволяет видеть переменные за пределами блока кода, в котором они объявлены. Поэтому var продолжает работать после того, как цикл for отработал.